Welche Techniken oder Paradigmen, die normalerweise mit funktionalen Sprachen assoziiert werden, können auch in Imperativsprachen produktiv eingesetzt werden?
z.B.:
Ich mag wirklich, dass ich mich in funktionalen Sprachen nicht um den Staat kümmern muss. Wenn ich besonders hartnäckig wäre, könnte ich C-Programme schreiben, ohne Variablen zu verändern. Ich kapsle nur meinen Zustand in Variablen ein, die an Funktionen übergeben werden, und an Werten, die von Funktionen zurückgegeben werden.
Obwohl Funktionen keine Werte erster Klasse sind, kann ich einen in ein Objekt in Java einbinden und diesen in eine andere Methode übergeben. Wie funktionale Programmierung, nur weniger Spaß.
Also, für Veteranen der funktionalen Programmierung, wenn Sie in imperativen Sprachen programmieren, welche Ideen von FP haben Sie erfolgreich angewendet?
Schön fast alle?
Wenn Sie funktionale Sprachen verstehen, können Sie imperative Programme schreiben, die von einem funktionalen Stil "informiert" sind. Das führt Sie weg von Nebenwirkungen und zu Programmen, in denen das Lesen des Programmtextes an einem bestimmten Punkt ausreicht, um Sie wirklich wissen zu lassen, was die Bedeutung des Programms zu diesem Zeitpunkt ist.
Im Morgengrauen der Zeit machten wir uns Sorgen um "Kopplung" und "Zusammenhalt". Das Erlernen eines FPs wird Sie dazu bringen, Systeme mit optimaler (minimaler) Kopplung und hoher Kohäsion zu schreiben.
Hier sind Dinge, die FP in einer Nicht-FP-Sprache behindern:
Wenn Sie keine erstklassigen Funktionen haben, wird das Schreiben funktionaler Programme beeinträchtigt, aber es gibt einige Dinge, die Sie nicht tun müssen. Der erste besteht darin, den veränderbaren Zustand zu vermeiden - versuchen Sie, dass die meisten oder alle Ihrer Klassen neue Objekte zurückgeben, die den geänderten Zustand darstellen, anstatt die Änderung intern vorzunehmen. Wenn Sie beispielsweise eine verknüpfte Liste mit einer add
-Operation schreiben, möchten Sie die neue verknüpfte Liste von add
zurückgeben, anstatt das Objekt zu ändern.
Während dies Ihre Programme weniger effizient macht (aufgrund der erhöhten Anzahl von Objekten, die erstellt und zerstört werden), können Sie das Programm leichter debuggen, weil der Zustand und die Operation der Objekte vorhersagbarer werden, ganz zu schweigen davon die Möglichkeit, Funktionsaufrufe tiefer zu verschachteln, da sie über Statuseingänge und -ausgaben verfügen.
Ich habe erfolgreich höherwertige Funktionen verwendet, insbesondere die Art, die übergeben wird, anstatt die Art, die zurückgegeben wird. Die Art, die zurückgegeben wird, kann ein wenig mühsam sein, kann aber simuliert werden.
In imperativen Sprachen funktionieren alle Arten von anwendbaren Datenstrukturen und rekursiven Funktionen.
Die Dinge, die ich am meisten vermisse:
Fast keine imperative Sprachen garantieren, jeden Tail Call zu optimieren.
Ich kenne keine imperative Sprache, die Fallanalyse durch Mustervergleich unterstützt.
Ich weiß, dass das eine alte Frage ist, aber Antworten mit Beispielen können in diesem Video auf infoQ gesehen werden in etwas Tiefe hinein.
Tags und Links programming-languages functional-programming imperative