関数型プログラミング言語を採用すべきですか?


10

私は最近、自分のコードを書く方法についてもっと心配しています。デザインパターンに関するいくつかの本を読んだ後(そしてそれらの熱狂的な実装については、きっと)、私は自分の考えを、変化するものをカプセル化することに大きくシフトさせました。インターフェースが少なく、メソッド指向のコードが多く書かれていることに気づきがちですが、述語、アクション、その他のデリゲートタスクを使用して古いクラスに活気を与えたいと思っています。変化するのは行動だと思うことが多いので、それをカプセル化します。常にではありませんが、多くの場合、インターフェイスを単一のメソッドに分解し、クライアントコードに新しいクラスを作成させるのではなく、タスクにデリゲートを使用することを好みます。

だから私はそれが私を襲ったと思います。代わりに関数型プログラミングを行うべきですか?
編集: 関数型プログラミングについて誤解している可能性があります。

現在選択している言語はC#で、C ++の出身です。私はゲーム開発者として働いていますが、現在は失業しています。

私は建築に対する情熱を持っています。私の利点は、クリーンで柔軟性があり、再利用可能で保守可能なコードです。私がこれらの方法で毒されているのか、それともより良いのかわかりません。リファクタリング熱がありますか、それとも次に進むべきですか?これは「仕事に適したツールを使用する」という疑問かもしれませんが、ご意見をお聞かせください。

関数型言語を選ぶべきでしょうか?私の恐怖要因の1つは、Visual Studioの快適さを離れることです。


Visual Studioを離れることが契約違反の場合は、F#を試すことができます。
アダムリア

それは契約解除者ではありません。私は他の多くの選択肢を試したことがありません。私は、インテリセンス、リファクタリング、または同様のツールなしで作業することに少し恐怖を感じ、おそらくプレーンテキストエディターでコードを書き直すことになるという考えを持っていると思います。
ステートメント

私は現在失業中です...これを最初に修正する必要はありませんか?
ジョブ

しばらくはVSなしで仕事をしようと思います。とてもシンプルな方法で作業するのは楽しいかもしれません。
Zachary K

@ジョブ、はい、しかし私は最近かなりひどい出来事に悩まされました:)私は私の足を傷つけました(まあ私は足でコードを書いていませんが、それでも...)古い仕事を辞めた直後です新しいものを検索します。
ステートメント

回答:


5

はい

新しいものを学ぶことは楽しいはずです。そして、プログラミングの新しい方法を学ぶことで、より優れたプログラマーになるはずです。HaskellまたはErlangのいずれかをチェックします。どちらも機能しますが、非常に異なります。Haskellを選んだら、YouTubeまたはポッドキャストで「Simon Payton Jones」による講演をいくつか見つけてください。男は素晴らしいスピーカーです。


1
私は多くの理由でこの答えを選びました。@Zachary Kは、有名な場所の箱から出て、別の視点を持つのは楽しいかもしれないと言っています。私は恐れてはならない何か新しいことに挑戦します。それは一日の終わりではありません。Haskellは、数回前にさまざまな議論で私の注意を引いた言語です。関数型言語が必要どうかはわかりませんが、@ Toby Allenが言うように、これは他の方法がどのように機能するかを確認するのに最適な方法であり、いくつかのUnrealScriptを試した後にこれに同意します。@ammoQは少しポイントを逃しましたが、質問の定義があまりよくありませんでした。私はまだ彼の懸念を得ます。
ステートメント

お役に立ててうれしいです。楽しんでください
ザカリーK

14

聖なる* * * *。特効薬はありません。降りて リラックスして深呼吸します。

ツールボックスにツールがあるからといって、それを使用する義務があるわけではありません。手元のタスクに集中します。つまり、機能するプログラムを作成し、コードの臭いが悪ければリファクタリングします。将来的に変更される可能性があるという理由だけで、細部をすべてカプセル化して抽象化しないでください。IMOでは、KISSとYAGNIを直接開始し、実際に変化するときに変化する要件に対応する方がはるかに優れています

関数型言語があなたのニーズにより適しているかどうか、ここにいる誰もが教えてくれるとは思えません。何をしているのか教えてくれなかったからです。


ええと、今は特に何もしていません。私は仕事の合間にいます。私はゲーム開発者です。
ステートメント

3
これはオーバーエンジニアリングに関して危険な状況です。締め切りもなく、バックログもなく、詳細に取り憑かれるには時間がかかりすぎます。
user281377

(頭の中にはっきりとした絵がないので、多くの当て推量が予想されます)私の "ニーズ"は、コードを書くことを好む方法にもっと反映されていると思います。関数型プログラミングについてはあまり知りませんが、その名前から少しだまされたのではないでしょうか。私の好みは、思ったほどオブジェクト指向ではないと感じています。それで、私は別のパラダイムで働くことを楽しむべきでしょうか?
ステートメント

はい、そうだと思います。私は今、学習の段階にあるので、特定の方法で書くことの可能性を探っています。職場では、そのようなコードを書く時間がないことが多く、行動規範を尊重し、開発者間で一貫したスタイルを維持する必要があります。
ステートメント

2
仕事の合間に今手元にあるすべてのツールを試してみるのはまったく問題ありませんが、靴が合うかどうかはわかりません。
user281377

12

F#を取得できます。これは.NET関数型言語であり、Visual Studioを使用して、.NETに関する多くの知識を再利用できます。もちろん、そのアセンブリはC#アセンブリとシームレスに統合されます(1つのプロジェクトでC#、C ++ / CLI、F#を簡単に組み合わせることができます)。F#サポートはVS Pro以降に付属していますが、デフォルトで有効になっているかどうかはわかりません。


VS2008にはF#のアドオンがあると思いますが、VS2010ではデフォルトです。
apoorv020

F#は無料のVS Shellでも機能します。
SKロジック

6

IMO、関数型言語を試す価値は十分にあります。リリースされた製品でそれを直接使用したことがない場合でも、それを学ぶことはほぼ間違いなくプログラミングに関して多少異なる見解/視点を与えるのに役立ちます。最終的にすべての「実際の」コーディングをC#で続けていたとしても、C#で記述したコードの改善に役立つ可能性はかなりあります。

他の人が述べたように、Visual Studioに慣れている人にとって明らかな選択はF#です。これは基本的にOcaml / Caml / MLの派生物です。IMO、これはMicrosoftが関数型プログラミングを紹介するのに適した選択でした-本格的な関数型言語ですが、一部の言語ほど外部構文はありません(たとえば、Lispベースの言語はそうです)本当の利点があります、初心者はほとんど常に読むのが難しいと感じます)。


2

はい、そうすべきです。

Haskellのような純粋な言語を選択すると、新しい言語だけでなく、新しい考え方も学べます。これは、手続き/ OO作業の後半でも役立ちます。

一方、F#は純粋ではないため、関数型プログラミングで重要なことを見逃してしまう可能性があります。Yóuは、いわば、F#構文で、ここで変数を変更し、そこで副作用を実行する手続き型プログラムを書き続けることができます。


私は実際にtryhaskell.orgから始めました:)新しいことを学ぶのはエキサイティングです。
ステートメント

1

すでにc#を使用している場合、新しい言語は必要ありません。拡張メソッド、ラムダ、および汎用のFunc / Action型の組み合わせにより、C#で関数型コードを記述するのはかなり簡単です。アプリケーション全体を変更する必要なく、最も意味のあるアルゴリズム。


1
常に別の言語が必要です。それを使用したことがなくても、新しい言語を学ぶことは素晴らしい学習体験です。1つの言語がすべてを備えているわけではありません。
Toby Allen

常に学ぶ必要がありますが、必ずしも別の言語を学ぶ必要はありません。利点は、言語自体ではなく関数型プログラミングの概念を学ぶことから得られます。慣れ親しんだ環境を離れることなく、プロジェクト全体を変更することなく、それを行うことができます。C#は十分に優れており、実用的には、実際にそれから利益を得る機能コードのみをアルゴリズムに含めることには大きな利点があります。
トムクラークソン

ええ、私の懸念は、メソッド/関数を操作するのにより適した言語があるかどうかに偏っていたと思います。C#はラムダ式を提供しますが、それ自体はすばらしいですが、たとえば、パラメーターなしで関数が値を返すようにすると、()=> xのようなコードが生成されます。
ステートメント

+1 @Toby。最近、UnrealScriptリファレンスをざっと見て、states et.cを操作するための興味深い言語ソリューションをいくつか見ました。それは問題について考えるという点でC#に引き継がれ、彼らは非常に素晴らしい解決策を持っています。だから、はい、私はあなたがサンドボックスから出て、あなたが見つけたすべての砂とおもちゃのためにあなたの隣人を略奪するときあなたが多くを学ぶと信じます:)
ステートメント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.