it-swarm.com.de

Entspricht den Prinzipien von SOLID für die funktionale Programmierung)

Ich fand die SOLID-Prinzipien sehr nützlich, wenn ich über objektorientiertes Design nachdenke.

Gibt es einen ähnlichen/äquivalenten Satz sprachunabhängiger Prinzipien, die auf die funktionale Programmierung zugeschnitten sind?

39
mikera

Es ist ein bisschen schwierig, Äquivalente zu finden, aber ich kann versuchen:

  • [~ # ~] s [~ # ~] (SRP) in FP eine Funktion erstellt IMMER dieselbe Ausgabe Für die gleichen Argumente wird dies als referenzielle Transparenz bezeichnet
  • [~ # ~] o [~ # ~] (OCP) in FP gibt es ein Konzept namens algebraische Daten Typen, schauen Sie sich an, wie es sich auf Klassenhierarchien bezieht und welches Problem beide zu lösen versuchen 1
  • [~ # ~] l [~ # ~] (LSP) Das Liskov-Substitutionsprinzip ist Kontravarianz 2
  • [~ # ~] d [~ # ~] (DIP) in der allgemeinen funktionalen Programmierung erreicht Abstraktion durch Funktionszusammensetzung, es gibt auch andere Mechanismen mit der Hilfe der Kategorietheorie (zum Beispiel Monoid oder Funktor) für "Dependency Injection" 
15

SOLID erweist sich auch für die funktionalen/imperativen Bereiche als gute Idee.

SRP - 'Nur eins tun' wurde in erster Linie aus der imperativen Programmierung übernommen. Kleine, fokussierte Funktionen zu haben ist gut.

OCP - Es ist gut, wenn Sie das Verhalten ändern können, ohne den Code zu ändern. Die funktionale Programmierung verwendet mehr Funktionen höherer Ordnung als die Vererbung, aber das Prinzip gilt.

LSP - Die Einhaltung eines Schnittstellenvertrags ist in der funktionalen Programmierung genauso gut wie in der objektorientierten. Wenn eine Sortierfunktion einen Komparator benötigt, ist zu erwarten, dass die 0 gleich ist, weniger als negative Ergebnisse liefert, größer als positive Ergebnisse.

ISP - Die meisten funktionalen Sprachen haben noch Strukturen. Es ist immer noch eine gute Praxis, den kleinsten Datensatz anzugeben, der für eine Funktion erforderlich ist. Das Erfordernis der am wenigsten spezifischen Schnittstelle zu den Daten (warum Listen von Ints verwenden, wenn Aufzählungen von T genauso gut funktionieren?) Ist immer noch eine gute Praxis.

DIP - Die Angabe von Parametern für eine Funktion (oder eine Funktion höherer Ordnung, um sie abzurufen) anstelle einer harten Codierung der Funktion, um einen Wert zu erhalten, ist genauso gut funktionale Programmierung wie bei objektorientiert.

Und selbst bei der objektorientierten Programmierung gelten viele dieser Prinzipien auch für die Gestaltung von Methoden in den Objekten.

47
Telastyn