オブジェクト指向プログラミングの文献には、設計パターンがたくさんあります。オブジェクト指向プログラミングに関するほとんどの本は、工場やデコレーターのようなパターンを設計するために1〜2章を捧げています。それでは、関数型言語の同等のパターンとは何ですか?なぜそれらについて本を書いていないのですか?関数型言語について、デザインパターンの必要性を取り除く特別なものはありますか?
オブジェクト指向プログラミングの文献には、設計パターンがたくさんあります。オブジェクト指向プログラミングに関するほとんどの本は、工場やデコレーターのようなパターンを設計するために1〜2章を捧げています。それでは、関数型言語の同等のパターンとは何ですか?なぜそれらについて本を書いていないのですか?関数型言語について、デザインパターンの必要性を取り除く特別なものはありますか?
回答:
オブジェクト指向と関数型プログラミングは2つの非常に異なるプログラミングパラダイムであり、デザインパターン(DP)はオブジェクト指向の設計とプログラミングの重要な部分です。DPは関数型プログラミングではそのような役割を果たしません。
DPは関数型プログラミングには必要ないと言うことさえできます。DPが治るみはありません。
Peter Norvig は、Design Patternsブックの23のパターンのうち16 がLispまたはDylanで「見えないか単純な r」であることに気付きました。
「多くのパターンは、オブジェクト指向またはより一般的に可変状態を意味するため、データが不変またはそのように扱われる関数型プログラミング言語では適用できない場合があります。」- http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29
ジェレミー・ギボンズが本を書いています。終了するまで、彼のブログ「関数型プログラミングのパターン」を読むことができます。彼は自分の投稿を古いものから新しいものへと読むことを推奨しています。
彼の出版物も参照してください。彼は、高次のデータ型汎用プログラムとしてのデザインパターンのギャングオブフォーパターンを取り上げ、折り紙プログラミング(折り畳みと展開)で再帰方程式を使用したプログラミングのパターンを説明しています。
簡単な事実は、多くのオブジェクト指向パターンが関数型言語ではイディオムと見なされることです(特に元のGoFパターン)。たとえば、Iteratorパターン(C#などの言語に組み込まれています)は、シーケンス演算子を持つLispまたはMLでは必要ありません。
オブジェクト指向システムで使用するパターンの多くは、「本質的でないもの」を邪魔にならないようにするのに役立つため、オブジェクトのコーディングに集中できます。言い換えれば、パターンはアプリケーションの重要でない部分の解決策です。ビジネス価値の追加に集中できるように、以前に解決された一般的なニーズに対処するために、パターンを活用する必要があります(データベース送信などを処理するエンタープライズアプリケーションアーキテクチャのファウラーパターンのパターンや、ユニットテストを強化するxUnitパターン)アプリケーション用。
GoFパターンの仕様を超えて、関数型プログラミングにも適用できるデザインパターンがあると確信しています。問題は、オブジェクト指向が支配的なパラダイムであることです。機能的な開発者を対象とするパターンブックを作成すること...率直に言って、出版社からの承認を得ることはありません。それは要約するものです。Functional Patternsには、トピックに特化したかなりの数の本があるほど十分な市場はありません。
スチュアート・シエラによるこのトピックに関する良い話(〜45分):
http://www.infoq.com/presentations/Clojure-Design-Patterns
必ずしも拘束力があり権威があるわけではありませんが、FPをデータ分析に使用した私の経験から、彼の多くの例を認識しました。
Clojureで記述された例ですが、FP言語に適用される可能性があります。彼がカバーするパターンに付ける名前は次のとおりです。
設計パターンの学習に純粋に興味がある場合は、Haskellに勝るものはありません。時間をかけて言語を難しい方法で学習すると、ほとんどの基本的なパターンに慣れることができます。これらは言語に組み込まれています。
モナドをスキップしないでください。たくさんの長い説明がそこにあります、そして、考えを沈めるためにいくらかのことをします、しかし、あなたがプラグインし続けるならば、最終的にそれはあなたに夜明けを迎えて、そしてあなたがどれくらいのデザインパターンがあり得るかに驚くでしょうこの1つの抽象化/インターフェイスの上に構築します。
Haskellを手に入れると、FPアーセナルを十分に手に入れて危険にさらすことができます。ポイントは、あなたがそれを得るまでそれを維持することです。ショートカットはありません。
FPの設計方法論が問題空間を正確に反映するように型を設計し、実装が自動的に従う必要がある限り、設計パターンに関する本に相当するFPは、Chris OkasakiのPurely Functional Data Structuresのようなものです。