EMZETT.
Login

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

  1. Reine Funktionen: gleiche Eingabe ergibt immer gleiche Ausgabe, keine Nebenwirkungen (siehe Pure Function).
  2. Unveränderliche Daten: Statt eine Liste zu ändern, erzeugt man eine neue (Immutability (Unveränderlichkeit)).
  3. Funktionen als Werte: Man kann sie übergeben, zurückgeben und speichern (Higher-Order-Function, Lambda-Ausdruck).
  4. 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)      # 56

Dasselbe 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)