オブジェクト指向プログラミングのパターンに関する非常に優れたGoFブック(デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素)と、このテーマに関するWebの記事やリソースがたくさんあります。
関数型プログラミングのパターン(ベストプラクティス)に関する本(記事、リソース)はありますか?
PythonやRubyのような言語での動的計画法については?
AOPの場合は?
オブジェクト指向プログラミングのパターンに関する非常に優れたGoFブック(デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素)と、このテーマに関するWebの記事やリソースがたくさんあります。
関数型プログラミングのパターン(ベストプラクティス)に関する本(記事、リソース)はありますか?
PythonやRubyのような言語での動的計画法については?
AOPの場合は?
以前に関連する質問がありました:「関数型プログラミングはGoFデザインパターンに取って代わりますか」、素晴らしい回答がありました。
「デザインパターン」に相当するものは、FPでは非常にあいまいです。一般に、コードに「パターン」が表示されるたびに、そのすべての用途を統一的にカバーするものを作成する必要があります。多くの場合、それは高階関数になります。
たとえば、次のCコード
for (int i = 0; i < n; i++)
if (a[i] == 42)
return true;
return false;
いくつかの基本的な「デザインパターン」を考えることができます-リストに特別な要素があるかどうかをチェックします。このスニペットは、さまざまな条件のコードで何度も表示される可能性があります。FPでは、高階関数を数回使用するだけです。それはもはや「パターン」ではありません。
関数型プログラミングには独自の手法がありますが、それらはOOPの「デザインパターン」とは大きく異なります。それらには、ポリモーフィズム、リスト、高階関数、不変性/純度、怠惰の使用が含まれます[すべてがFPに必須または固有であるとは限りません]...「FPのコアコンセプトとは」も参照してください。また、型クラス(Haskell)、モジュールと関数(OCaml)、継続、モナド、ジッパー、フィンガーツリー、モノイド、矢印、適用可能な関数、モナド変換子、多くの純粋に機能的なデータ構造(本)など。は、Randall Schulzによってすでに言及されており、最高の状態でFPの非常に豊富なリソースを形成します。
慣用的なコードの書き方を学ぶには、関数型プログラミング言語に関する本/リソースで十分です(たとえば、RWHやLYAH)。必然的に考えることと機能的に考えることの違いは、常にそこで説明されています。
動的言語では、JeffFosterのリンクは優れたコレクションです。これは、「デザインパターン」と見なすことができるJavaScriptでのメモ化の非常に巧妙な使用法です。
GoFで記述されているデザインパターンのリストは、C++やJavaなどの言語用に書かれています。柔軟性のない言語をより動的にするための回避策のリストと見なされることもあります。たとえば、実行時にクラスへのメンバーの追加関数を変更するだけでよいため、RubyではVisitorパターンは実際には必要ありません。ミックスインを使用できる場合、デコレータパターンは廃止されます。
私がC++でソリューションを実装しているとき、私はほとんどの時間をスキャフォールディングコードの記述に費やす傾向があるというのが私の経験です。まず、アプリケーションのプログラムドメインで考えることができるプラットフォームを作成します。デザインパターンは、おそらくさまざまな種類の足場を分類する方法として開発されました。
Rubyでプログラミングしているときは、サポートするコードがあまりありません。それは必要ないようです。
私の理論では、他の言語は、基本的な言語構成で十分であるという理由だけで、デザインパターンの概念を強調していません。JavaとC++を守るために:これはおそらく、関数型言語とAOP言語がより具体的な問題のドメインまたはニッチで使用されることが多いのに対し、JavaとC++はすべてに使用されるためです。
そして今、何か違うもののために。オブジェクト指向デザインに少し飽きてきて、何か新しいことを学びたいのなら、Stepanovによって書かれた本ElementsofProgrammingに興味があるかもしれません。この本では、数学的な観点からプログラミングにアプローチする方法を説明しています。プレビューについては、Adobeのクラスノートを確認してください(このページにあります)。アドビの収集論文にも興味があるかもしれません。
動的計画法のデザインパターンへのリンクは次のとおりです
関数型真珠(の1つ)は、関数型プログラミングのデザインパターンの標準的なセットではありませんか?
個人的に動的言語の私の最も重要なパターン-テストを書く。静的に型付けされた言語よりもさらに重要です。