Es fällt mir wirklich schwer, den Unterschied zwischen prozeduralen und funktionalen Programmierparadigmen zu verstehen .
Hier sind die ersten beiden Absätze aus dem Wikipedia-Eintrag zur funktionalen Programmierung :
In der Informatik ist funktionale Programmierung ein Programmierparadigma, das Berechnung als Bewertung mathematischer Funktionen behandelt und Zustands- und veränderbare Daten vermeidet. Es betont die Anwendung von Funktionen im Gegensatz zum imperativen Programmierstil, der Zustandsänderungen betont. Die funktionale Programmierung hat ihre Wurzeln in der Lambda-Rechnung, einem formalen System, das in den 1930er Jahren entwickelt wurde, um Funktionsdefinition, Funktionsanwendung und Rekursion zu untersuchen. Viele funktionale Programmiersprachen können als Ausarbeitungen des Lambda-Kalküls angesehen werden.
In der Praxis besteht der Unterschied zwischen einer mathematischen Funktion und dem Begriff einer "Funktion", die in der imperativen Programmierung verwendet wird, darin, dass imperative Funktionen Nebenwirkungen haben können, die den Wert des Programmzustands ändern. Aus diesem Grund fehlt ihnen die referenzielle Transparenz, dh der gleiche Sprachausdruck kann je nach Status des ausführenden Programms zu unterschiedlichen Zeiten zu unterschiedlichen Werten führen. Umgekehrt hängt der Ausgabewert einer Funktion im Funktionscode nur von den Argumenten ab, die in die Funktion eingegeben werden. Wenn Sie also eine Funktion
f
zweimal mit demselben Wert für ein Argument aufrufenx
, erhalten Sie dasselbe Ergebnisf(x)
beide Male. Die Beseitigung von Nebenwirkungen kann das Verständnis und die Vorhersage des Verhaltens eines Programms erheblich erleichtern. Dies ist eine der Hauptmotive für die Entwicklung der funktionalen Programmierung.
In Absatz 2 heißt es
Umgekehrt hängt der Ausgabewert einer Funktion im Funktionscode nur von den Argumenten ab, die in die Funktion eingegeben werden. Wenn Sie also eine Funktion
f
zweimal mit demselben Wert für ein Argument aufrufen, erhalten Sie beide Malex
dasselbe Ergebnisf(x)
.
Ist das nicht genau der gleiche Fall für die prozedurale Programmierung?
Worauf sollte man bei prozeduralen und funktionalen Merkmalen achten?