it-swarm.dev

Wo sind alle funktionalen Programmierentwurfsmuster?

Die OO-Programmierliteratur ist voll von Entwurfsmustern. Die meisten Bücher über objektorientierte Programmierung widmen ein oder zwei Kapitel dem Entwerfen von Mustern wie Fabriken und Dekorateuren. Was sind die äquivalenten Muster in funktionalen Sprachen und warum hat noch niemand ein Buch darüber geschrieben? Gibt es etwas Besonderes an funktionalen Sprachen, das die Notwendigkeit von Entwurfsmustern überflüssig macht?

76
davidk01

OO und funktionale Programmierung sind zwei sehr unterschiedliche Programmierparadigmen, und Entwurfsmuster (DP) sind ein wesentlicher Bestandteil von OO Entwurf und Programmierung. DP spielen bei der funktionalen Programmierung keine solche Rolle.

Man könnte sogar sagen, dass DP in der funktionalen Programmierung nicht benötigt werden - es gibt keinen Juckreiz, gegen den DP geheilt werden kann.

52
Maglob

Jeremy Gibbons schreibt das Buch. Bis es fertig ist, können Sie seinen Blog lesen Patterns in Functional Programming . Er empfiehlt, seine Beiträge vom ältesten zum neuesten zu lesen.

Durchsuchen Sie auch seine Veröffentlichungen . Er behandelt Gang of Four-Muster in Design Patterns als datentypgenerische Programme höherer Ordnung und beschreibt die Muster der Programmierung mit rekursiv Gleichungen in Origami-Programmierung (faltet und entfaltet sich).

68
Corbin March

Die einfache Tatsache ist, dass viele OO Muster als Idiome in funktionalen Sprachen betrachtet werden (insbesondere die ursprünglichen GoF-Muster). Zum Beispiel ist das Iterator-Muster (das jetzt in Sprachen wie C # integriert ist) einfach nicht ' t erforderlich in einem LISP oder ML mit Sequenzoperatoren.

Viele der Muster, die wir in O-O-Systemen verwenden, helfen uns dabei, das "Unwesentliche" aus dem Weg zu räumen, damit wir uns auf das Codieren von Objekten konzentrieren können. Mit anderen Worten, die Muster sind Lösungen für die nicht interessanten Teile der Anwendung. Wir sollten Muster nutzen, um allgemeine Anforderungen zu erfüllen, die zuvor gelöst wurden (wie die Muster in Fowlers Patterns of Enterprise Application Architecture für den Umgang mit Dingen wie Datenbankübertragung oder xUnit Patterns zur Steigerung Ihrer Unit-Tests), damit wir uns auf die Steigerung des Geschäftswerts konzentrieren können für die Anwendung.

Ich bin sicher, dass es über die Besonderheiten der GoF-Muster hinaus Entwurfsmuster gibt, die auch für die funktionale Programmierung gelten. Die Sache ist, dass O-O das vorherrschende Paradigma ist. Das Schreiben eines Musterbuchs, das sich an funktionale Entwickler richtet ... wird ehrlich gesagt kein grünes Licht von einem Verlag erhalten. Darauf kommt es an. Es gibt nicht genug Markt für funktionale Muster, um eine bedeutende Anzahl von Büchern zu diesem Thema zu haben.

13
Michael Brown

Ein guter Vortrag (~ 45 min) zu diesem Thema von Stuart Sierra:

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

Nicht unbedingt verbindlich und maßgebend, aber ich habe einige seiner Beispiele aus eigener Erfahrung mit FP für die Datenanalyse) erkannt.

Beispiele, die in Clojure geschrieben wurden, aber wahrscheinlich auf jede FP Sprache) anwendbar sind. Die Namen, die er den von ihm abgedeckten Mustern gibt, sind:

  • Zustand/Ereignis
  • Konsequenzen
  • Akkumulator
  • Reduzieren/Kombinieren
  • Rekursive Erweiterung
  • Pipeline
  • Verpackung
  • Zeichen
  • Beobachter
  • Strategie
11
Aaron Johnson

Wenn Sie wirklich daran interessiert sind, die Designmuster zu lernen, sind Sie bei Haskell genau richtig. Wenn Sie sich die Zeit nehmen, um lernen Sie die Sprache auf die harte Tour , werden Sie auf die meisten Grundmuster stoßen und sich mit ihnen vertraut machen - sie sind in die Sprache eingebrannt.

Überspringen Sie nicht Monaden. Es gibt eine Reihe langwieriger Erklärungen, und es bedarf einiger Anstrengungen, um die Ideen einzubringen. Wenn Sie jedoch weiter einstecken, wird es Ihnen irgendwann klar, und Sie werden erstaunt sein, wie viele Designmuster es geben kann Bauen Sie auf dieser einen Abstraktion/Schnittstelle auf.

Sobald Sie Haskell betrogen haben, steht Ihnen genug FP Arsenal zur Verfügung, um gefährlich zu sein. Punkt ist, bleib dran bis du es bekommst. Es gibt keine Verknüpfungen.

6
Mario T. Lanza