Funktionale Programmierung
Kurz: Funktionale Programmierung baut Programme aus Funktionen, die nur aus ihren Eingaben ein Ergebnis berechnen und nichts sonst verändern. Das macht Code leichter zu testen, zu verstehen und parallel auszuführen.
Kernideen
- Reine Funktionen: gleiche Eingabe ergibt immer gleiche Ausgabe, keine Nebenwirkungen (siehe Pure Function).
- Unveränderliche Daten: Statt eine Liste zu ändern, erzeugt man eine neue (Immutability (Unveränderlichkeit)).
- Funktionen als Werte: Man kann sie übergeben, zurückgeben und speichern (Higher-Order-Function, Lambda-Ausdruck).
- Schleifen durch Transformation ersetzen:
map,filter,reduce.
Beispiel (Python)
zahlen = [1, 2, 3, 4, 5, 6]
quadrate_gerader = [x * x for x in zahlen if x % 2 == 0] # [4, 16, 36]
from functools import reduce
summe = reduce(lambda a, b: a + b, quadrate_gerader, 0) # 56Dasselbe mit map/filter: sum(map(lambda x: x*x, filter(lambda x: x%2==0, zahlen))).
Weitere Begriffe
- Closure (Closure) und Currying (Currying): Funktionen, die Werte „einfangen“ oder schrittweise Argumente bekommen.
- Rekursion statt Schleifen (Rekursion).
- Lazy Evaluation (Lazy Evaluation): erst rechnen, wenn das Ergebnis gebraucht wird.
- Monaden (z. B.
Maybe/Option,Result): Muster, um Fehler und fehlende Werte ohne Ausnahmen zu behandeln.
In der Praxis
Rein funktionale Sprachen sind Haskell, Elm oder Clojure. Aber fast jede moderne Sprache (JavaScript, Python, Java, Kotlin, Rust, C#) bietet funktionale Werkzeuge. Man mischt: im Kern reine Funktionen, an den Rändern (Datenbank, Bildschirm, Netzwerk) die Nebenwirkungen. Bei Nebenläufigkeit hilft das enorm, weil es keine geteilten veränderlichen Daten gibt (Threads (Nebenläufigkeit)).
Siehe auch: OOP (Objektorientierte Programmierung)