すべての関数型プログラミングの設計パターンはどこにありますか?[閉まっている]


75

オブジェクト指向プログラミングの文献には、設計パターンがたくさんあります。オブジェクト指向プログラミングに関するほとんどの本は、工場やデコレーターのようなパターンを設計するために1〜2章を捧げています。それでは、関数型言語の同等のパターンとは何ですか?なぜそれらについて本を書いていないのですか?関数型言語について、デザインパターンの必要性を取り除く特別なものはありますか?


6
間違いなく機能的なデザインパターンがあります。たとえば、メモやモナドを考えてみてください。また、誰かがそれらを1か所に集めているのではないかと思っています。
FinnNk

2
FinnNk Monadはデザインパターンよりも型クラスです^ _ ^
代替案

haskellについては、Gabriel Gonzalezにいくつかのブログ投稿があります。たとえば、haskellforall.com
2012/08 /


1
Map reduceは1つです。パターンの良いリストがないことに失望している
Sridhar Sarnobat

回答:


48

オブジェクト指向と関数型プログラミングは2つの非常に異なるプログラミングパラダイムであり、デザインパターン(DP)はオブジェクト指向の設計とプログラミングの重要な部分です。DPは関数型プログラミングではそのような役割を果たしません。

DPは関数型プログラミングには必要ないと言うことさえできます。DPが治るみはありません。


41
デザインパターンがFPに適用されないことに同意するかどうかはわかりません。FPには、特に一般的な方法で解決される一般的な問題が残っています。OOで解決された問題とは異なる問題ですが、それでも問題はあります。現時点ではFPは商用の世界ではあまり一般的ではないので、おそらくOOよりもずっと注目されていないものだと思います。
d11wtq

22
関数型プログラミングに設計パターンが存在しないと主張することは、誤った情報です。最も簡単な反例はモナドです。関数型プログラミングでモナドを使用する必要はありませんが、純粋な関数型プログラミングの適用を容易にするために人々が従う非常に一般的なパターンです。それが本質的にデザインパターンの定義です。
voidvector

3
設計パターンは、プログラミングや住宅設計など、すべての設計活動に適用されます。実際、パターン言語の概念そのものは、アーキテクチャ:en.wikipedia.org/wiki/A_Pattern_Languageから来ています。
BobDalgleish 14

2
うーん。観測可能なストリーム、鉄道検証、そして地獄、ほとんどすべてのモナドは設計パターンですよね?
チェット

2
@voidvectorモナドは単なるデザインパターンではありません。FPでは、モナドは型システム間のファンクターとして使用され、概念自体は数学の枝であるカテゴリ理論から来ています。これらは、一般的な代数構造間の特定の種類の関係を記述するために使用されます。関数型プログラミングは、プログラミングにおける数学の使用を促進するための設計のダッターであると言う方が正確でしょう。
ジョンクラメラス

67

ジェレミー・ギボンズが本を書いています。終了するまで、彼のブログ「関数型プログラミングのパターン」を読むことができます。彼は自分の投稿を古いものから新しいものへと読むことを推奨しています。

彼の出版物も参照してください。彼は、高次のデータ型汎用プログラムとしてのデザインパターンのギャングオブフォーパターンを取り上げ、折り紙プログラミング(折り畳みと展開)で再帰方程式を使用したプログラミングのパターンを説明しています。


13

簡単な事実は、多くのオブジェクト指向パターンが関数型言語ではイディオムと見なされることです(特に元のGoFパターン)。たとえば、Iteratorパターン(C#などの言語に組み込まれています)は、シーケンス演算子を持つLispまたはMLでは必要ありません。

オブジェクト指向システムで使用するパターンの多くは、「本質的でないもの」を邪魔にならないようにするのに役立つため、オブジェクトのコーディングに集中できます。言い換えれば、パターンはアプリケーションの重要でない部分の解決策です。ビジネス価値の追加に集中できるように、以前に解決された一般的なニーズに対処するために、パターンを活用する必要があります(データベース送信などを処理するエンタープライズアプリケーションアーキテクチャのファウラーパターンのパターンや、ユニットテストを強化するxUnitパターン)アプリケーション用。

GoFパターンの仕様を超えて、関数型プログラミングにも適用できるデザインパターンがあると確信しています。問題は、オブジェクト指向が支配的なパラダイムであることです。機能的な開発者を対象とするパターンブックを作成すること...率直に言って、出版社からの承認を得ることはありません。それは要約するものです。Functional Patternsには、トピックに特化したかなりの数の本があるほど十分な市場はありません。


9

スチュアート・シエラによるこのトピックに関する良い話(〜45分):

http://www.infoq.com/presentations/Clojure-Design-Patterns

必ずしも拘束力があり権威があるわけではありませんが、FPをデータ分析に使用した私の経験から、彼の多くの例を認識しました。

Clojureで記述された例ですが、FP言語に適用される可能性があります。彼がカバーするパターンに付ける名前は次のとおりです。

  • 状態/イベント
  • 結果
  • アキュムレータ
  • 削減/結合
  • 再帰的拡張
  • パイプライン
  • ラッパー
  • トークン
  • 観察者
  • 戦略

6

設計パターンの学習に純粋に興味がある場合は、Haskellに勝るものはありません。時間をかけて言語を難しい方法で学習すると、ほとんどの基本的なパターンに慣れることができます。これらは言語に組み込まれています。

モナドをスキップしないでください。たくさんの長い説明がそこにあります、そして、考えを沈めるためにいくらかのことをします、しかし、あなたがプラグインし続けるならば、最終的にそれはあなたに夜明けを迎えて、そしてあなたがどれくらいのデザインパターンがあり得るかに驚くでしょうこの1つの抽象化/インターフェイスの上に構築します。

Haskellを手に入れると、FPアーセナルを十分に手に入れて危険にさらすことができます。ポイントは、あなたがそれを得るまでそれを維持することです。ショートカットはありません。


-3

FPの設計方法論が問題空間を正確に反映するように型を設計し、実装が自動的に従う必要がある限り、設計パターンに関する本に相当するFPは、Chris OkasakiのPurely Functional Data Structuresのようなものです。


1
岡崎の本は、多くのデータ構造とアルゴリズムの本のデータ構造部分に相当し、通常は変更可能なデータ構造のみを考慮しています。
AProgrammer

1
データ構造を設計パターンと同一視することは法案に合わないと思います。適切なクラス定義が表示されるまで、OOプログラマーが腕を振るだけではありません。
-davidk01

はい、岡崎の本はデザインパターンよりも低いレベルにあります。
-FinnNk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.