Programmieren: Paradigmen: Grundlagen
Aus Wikibooks
Paradigmen sind Prinzipien von Programmiersprachen. Sie spiegeln die Sichtweise auf Probleme und deren Lösungen wieder. Um ein Gefühl dafür zu bekommen, was ein Programmierparadigma ist, stellen wir das imperative dem funktionalen Paradigma gegenüber.
Ein Programm in einer imperativen Programmiersprache besteht im wesentlichen aus einer Folge von Anweisungen, die (zeitlich) nacheinander ausgeführt werden. Das heißt nicht, dass die erste Anweisung im Quelltext ausgeführt wird, dann die zweite usw. bis das Ende erreicht wurde. Es kann sehr wohl im Programm hin- und hergesprungen werden. Essentiell ist nur, dass Anweisungen nacheinander ausgeführt werden, die Reihenfolge kann schon geändert werden. Hinter jeder Anweisung darf prinzipiell beliebig viel Logik stecken. Es kann etwas berechnet werden, eine Ausgabe auf dem Bildschirm erfolgen, eine Datei eingelesen werden etc. Diese Denkweise entspricht am ehesten unser alltäglichen Erfahrung. Wir handeln ja selbst in zeitlich aufeinander folgenden Schritten. Viele Einsteiger sind sich deswegen gar nicht bewusst, dass es auch anders geht.
Das funktionale Programmierparadigma verfolgt so einen ganz anderen Ansatz. So etwas wie Zeit gibt es hier eigentlich nicht. Die zeitliche Abfolge der Anweisungen ist nicht festgelegt. Eine "Anweisung" (man spricht hier eher von Ausdrücken) konzentriert sich allein auf das zu berechnende Ergebnis. Deswegen sagt man, ein funktionales Programm besitzt keine "Seiteneffekte". Dabei wird diese Seiteneffektfreiheit zu Beginn oft als erzwungene Einschränkung angesehen, vor allem bei denen, die aus der imperativen Gemeinde kommen. Aber nochmals, so etwas wie Zeit gibt es im funktionalen Paradigma nicht. Ein funktionales Programm verfolgt einzig und allein nur ein Ziel: das Lösen der gestellten Aufgabe. Dabei wird ein funktionales Programm nicht unbedingt in einer festen Reihenfolge ausgewertet. Der Compiler entscheidet, zu welchem Zeitpunkt welche Ausdrücke ausgewertet werden. Das spiegelt sich im Stil wider, in dem programmiert wird. Dieser ist problem-orientiert, da man sich nicht damit beschäftigt, in welcher Reihenfolge die Anweisungen ausgeführt werden, und wie sie irgendwelche Variablen ändern, die später noch benötigt werden. So etwas wie "später" gibt es im Funktionalen ja nicht. Zur Verdeutlichung: Es geht nicht um Vor- oder Nachteile, sondern um das Konzeptuelle.

