Ich habe gerade mit funktionaler Programmierung angefangen (mit JavaScript und Node.js) und aus der Sicht der Dinge sieht es so aus, als würde der Code, den ich schreibe, im Vergleich zu Programmiersprachen mit a eine verdammt gute Codebasis sein Art objektorientiertes Paradigma.
Mit OOP bin ich mit Vorgehensweisen vertraut, die sicherstellen, dass Ihr Code einfach verwaltet und erweiterbar ist. Aber ich bin mir nicht sicher, ob es eine ähnliche Konvention mit funktionaler Programmierung gibt.
Antworten:
In der Praxis muss eine große funktionale Codebasis noch in eine Art strukturelles System unterteilt werden. Wenn Sie sich in OOP wohlfühlen, bleiben Klassen das natürliche Strukturierungselement. Sie streben nach "funktionalen Objekten": Konzeptuell verwandte Funktionen werden in einer Klasse zusammengefasst. Natürlich vermeiden Sie den Nicht-Konversationsstatus und die Abhängigkeit von Instanzvariablen.
Über die Struktur hinaus gibt es bestimmte Techniken wie die Anwendung von Teilfunktionen, die in der Funktionswelt für die Erweiterung, Wartbarkeit und Verallgemeinerung bevorzugt werden. Das Erkennen dieser Möglichkeiten kann jedoch schwierig sein, wenn Sie in einem hybriden Funktions- / Objektmodus arbeiten. Ich persönlich denke , es ist eine gute Idee ist Arbeit in einem Hybrid - Modus , sondern Studie und Spiel in einer reineren Umwelt, wie das von Haskell zur Verfügung gestellt.
quelle
Funktionale Programmiersprachen verfügen über eine Vielzahl leistungsfähiger Konzepte zum Erstellen von qualitativ hochwertigem Code, zum Beispiel: Teilweise angewandte Funktionen, Funktionskompositionen (diese ist wirklich leistungsfähig und meine Lieblingsfunktion), Makros, Funktionen höherer Ordnung. Und nicht zu vergessen unveränderliche Datenstrukturen.
quelle
Anstatt OOP für FP aufzugeben, sollten Sie versuchen, es mit einigen FP-Mustern zu erweitern. Jedes Mal, wenn Sie eine Sammlung bearbeiten müssen, ist dies ein guter Kandidat und verweist auf eine Reihe gängiger FP-Methoden wie Zuordnen, Falzen und Reduzieren. Schauen Sie sich underscore.js und backbone an, ein MVC-Framework, das das erstere umfassend nutzt.
quelle