Warum funktional programmieren?

:?:

Programmieranfänger beginnen meistens mit einer imperativen Programmiersprache, dh. einer Programmiersprache, deren Konzept auf Variablen beruht, die im Programmlauf verändert werden - also darauf beruht, dass das Programm einen impliziten Zustand hat (angegeben durch den Instruction Pointer und den Zustand der Speicherzellen) und der Veränderung des Zustands. Daraus ergibt sich, dass, wenn man zwei Funktionen mit gleichen Parametern ruft, nicht immer die gleichen Ergebnisse erscheinen müssen.

Funktionale Programmiersprachen beschränken sich rein auf Funktionen, die keine Nebenwirkungen haben. In der funktionalen Programmierung werden Funktionen geschaffen, deren Ziel die Berechnung von Werten ist (ähnlich einer mathematischen Funktion). Es werden nicht explizit Speicherzellen verändert. Funktionen haben keine Nebenwirkungen, weshalb beim Ruf von Funktionen immer das gleiche Ergebnis erscheint.

Wichtig zu verstehen ist, dass hier die Anweisungen hier durchaus deklarativen Charakter haben, dh. man beschreibt im Programmcode nicht, was genau geschehen soll (also welche Folge von Anweisungen ausgeführt werden soll), sondern was man gerne hätte (also den Zielzustand). Dann kümmert sich der Compiler / Interpreter darum, dass der Zustand erreicht wird, wie das gemacht wird, ist Sache des Compilers.

Für Informatiker kann es nützlich sein, den Kopf vom imperativen Stil zu befreien und auch andere Paradigmen zu erlernen. Bspw. kann es deutlich einfacher sein, bestimmte Ziele zu erreichen unter der Verwendung von funktionalen Sprachen, als bei imperativen Sprachen. Ein gutes Beispiel ist der QuickSort-Algorithmus, der imperativ aus mehreren Schleifen besteht und funktional lediglich aus einer Rekursion, die (in Haskell) kaum zwei Zeilen lang ist.