und wann setze ich sie ein?
“Mit funktionaler Programmierung ein besserer Entwickler werden”. Viele Artikel rufen aktuell dazu auf, der funktionalen Ordnung zu folgen. Ist der funktionale Programmierstil für Dich geeignet? Für welche Programmiersprachen lässt es sich anwenden? Muss eine hochwissenschaftliche Sprache wie Haskell verwendet werden? Diese Fragen beantwortet unser Artikel.
Woher kommt der funktionale Programmiertrend?
Vor einigen Jahren kam der Ruf nach Objektorientierter Programmierung auf. Nach dem Erscheinen von PHP 5 war ein guter Zeitpunkt, die Qualitätsstandards für PHP-Code neu zu setzen. Weg vom freien Programmieren und Spaghetticode und hin zu einer besseren Wartbarkeit. Alles wurde zu Objekten.
Heute ist es die Evolution von ECMAScript, bekannter unter dem Namen (funktionales) JavaScript, die eine Trendwende mit sich bringt. Die 2015 veröffentlichte Version ES6 bringt unzählige Verbesserungen. Angular, React und Vue sind die neuen Frontend-Frameworks für Webprojekte und Apps. JS-Bibliotheken wie jQuery gehören zum alten Eisen. Dieser Wandel bringt erneut den Ruf nach einer besseren Codestruktur mit sich.
Was ist Funktionale Programmierung?
Ein Programmierparadigma das in den 1930er Jahren entwickelt wurde und sich auf mathematische Grundlagen stützt. Moment, machen das nicht alle Programmiersprachen?
´´´´
var x = 1;
x = x + 1;
´´´´
Ein Code-Beispiel, das Mathematiklehrer zum Verzweifeln bringt. Obwohl x = x + 1 in Algebra und Arithmetik unmöglich ist, findet dieser Code in tausenden Programmen Verwendung. In einer funktionalen Programmiersprache ist diese Codezeile hingegen illegal.
Reine Funktionen
Rein funktionale Programmiersprachen erfordern reine Funktionen (engl. Pure Function). Eine reine Funktion
- verwendet einen Eingabewert,
- gibt den gleichen Ausgabewert zurück,
- hat keine Seiteneffekte,
- beachtet die Unveränderbarkeit von Variablen.
Seiteneffekte
Einfache Seiteneffekte sind ein console.log oder das Speichern einer Variable in die Datenbank. Hoppla, werden manche Entwickler denken. Ich kenne keine Alternative. Es geht nicht darum, console.log zu verbieten, sondern Berechnung und Speicherung nicht in ein und derselben Funktion zu vermischen.
Unveränderbarkeit
Die Unveränderbarkeit (engl. Immutability) von Variablen ist ein Verbot, das sich nicht auf reine Funktionen beschränkt. Variablen werden in funktionalen Programmiersprachen grundsätzlich nicht geändert. Stattdessen wird eine Kopie für den geänderten Wert erstellt.
Rekursion statt Schleife
Da die Unveränderbarkeit einfache Zähler in Schleifen betrifft, verwendet die Funktionale Programmierung kein for, while, do und repeat. Anstelle dieser Schleifenkonstrukte wird Rekursion verwendet:
´´´´
function sumRange(start, end, acc) {
if (start > end)
return acc;
return sumRange(start + 1, end, acc + start)
}
´´´´
Funktionen höherer Ordnung
Funktionen höherer Ordnung (engl. Higher Order Functions) können eine Funktion als Parameter verwenden. So ist es möglich, eine reine Funktion zur Berechnung in einer ebenso reinen Funktion zur Speicherung eines Datensatzes zu verwenden.
Warum funktional programmieren?
Was zuerst wie unnötiger Aufwand klingt, ist nicht nur wesentlich sauberer. Es vereinfacht die Fehlersuche und das Schreiben von Unit Tests. Nicht zuletzt erhöht es die Wartbarkeit des Codes immens.
Die multiparadigmatische Programmiersprache JavaScript entwickelt sich rasant. Die Versionen 2016, 2017 und 2018 zeigen die Evolution der Scriptsprache deutlich. Die oft kritisierte Fehlertoleranz wird von Version zu Version der Notwendigkeit sauberer Codestrukturen und Programmierparadigmen weichen.
Einsatzgebiete für die Funktionale Programmierung
Neben funktionalem JavaScript und rein funktionalen Programmiersprachen wie Haskell sind auch C#, Python, Java und PHP für den Einsatz funktionaler Programmierung geeignet. Für Einsteiger wie Umsteiger lohnt sich ein Blick auf die junge Programmiersprache Elm, die zu JavaScript, Haskell, OCaml, F# oder Clojure kompiliert.
Funktionale Programmierung lernen mit Elm
Sich auf jeden Programmiertrend und alle neuen Sprachen zu stürzen ist weder möglich noch sinnvoll. Ein kleiner Exkurs in eine rein funktionale Sprache wie Elm hilft jedoch, seinen Programmierstil zu verbessern. Code wird lesbarer, verständlicher und wartbarer.
Ein gute Übung ist es, ein kleines Programm oder einen Programmteil mit Elm neu zu schreiben. Nach dem Refactoring kann der Quellcode mit dem kompilierten und dem alten Code verglichen werden. Die Vereinfachung des Codes ist deutlich sichtbar. Viele Programmierer haben mit Elm einen großen Sprung gemacht. Einige sind bei Elm geblieben.
Um den Umgang mit Python zu erlernen empfehlen wir dir diesen Python Komplettkurs.
Fazit
Wer die verschiedenen Programmierparadigmen zu nutzen weiß, kann besser entscheiden welche Codestruktur für ein Projekt und die meist vorgegebene Sprache geeignet ist. Kein Ansatz ist für jede Aufgabenstellung passend. Erfahrene Programmierer, die in der Konzeptionsphase die richtige Entscheidung treffen, erzeugen wartbaren Code und werden Jahre später noch gerne an dem Projekt arbeiten.
Eine Software zur Verwaltung von Objekten, die in Beziehung zueinander stehen wird mit der objektorientierten Herangehensweise am besten gelingen. Eine umfangreiche Benutzeroberfläche, die über viele ähnliche Funktionen verfügt, würde damit im Chaos enden. Hier ist die Funktionale Programmierung genau richtig.