関数型プログラミングは私にとって奇妙な獣です。私はF#とHaskellを学び、いくつかの簡単なプログラムを書いてそれらを使うのが好きでしたが、一部の人々が話す「啓示のフラッシュ」は一度もありませんでした。しかし、ゆっくりと、不変であることを目的としたコードを作成し、タスクをより小さな機能に分割し、デリゲートをより多く使用しようとしていることに気付きました。あなたがそれを好めば、それらのテクニックの価値は自明であるため、あなたの仕事に忍び寄ることです。
今、より実践的にトレーニングのために:私は、2つの概念が本当にスタイルとして関数型プログラミングをクリックしていることに気付きました。
まず、FPスタイルは、OOPのような構成ではなく、データの構造に基づいています。型(文字列)を他の型(リスト)に変換するタイプセーフリストを生成する巧妙なトリックとして、C#のListのようなものを見ました。FPを学んだ後、今はMonadsのようなジェネリックを見ていきます。リストは、コードが取得できる構造化された形式であり、文字列を修飾します。
第二に、おそらくC#/ ASPプログラマーにとってより便利なのは、FPが再帰と繰り返しで動作し、OOPが可変性とループで動作するという考え方です。現在、ASPページのライフサイクルは一種のFPであると考える傾向があります。各リクエストはライフサイクル全体を通してゼロから処理されるため、ページ全体が事実上1つの大きなゆっくりと再帰するプログラムです。その概念を絞り込むことができれば、古いプログラムを変更する代わりに、データを取り込み、それを操作し、新しいデータを返す関数のループの周りに命令型プログラムをどのように構築できるかがよくわかります。
少なくとも私にとって、このアプローチで克服するのが最も難しいハードルは、可変オブジェクトを使用するときに大量のリソースを浪費しているという感覚を沈めれば、大量のメモリを節約できるということです。私たちが信頼しているGCでは、実際にプログラムが実行されているかどうかを確認し、プロファイラーを使用して問題がどこにあるかを確認するまで、パフォーマンスの懸念を取り除くことを学ばなければなりませんでした。