Zurück zur Übersicht

Begriff

Currying

Computer Science Functional Programming S3
2 Quellen 0 Lernpfade 1 Backlink enriched

Warum wichtig?

Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.

Du hast eine Funktion add(a, b). Du rufst sie auf: add(2, 3). Ergebnis 5. Beim Currying (benannt nach Haskell Curry) zerhackst du die Funktion. Statt einer Funktion, die zwei Dinge nimmt... Hast du eine Kette von Funktionen, die je ein Ding nehmen. add(2) gibt eine neue Funktion zurück ("Ich warte auf b"). Diese neue Funktion rufst du mit 3 auf: neueFunktion(3). Ergebnis 5. Schreibweise: add(2)(3).

Merksatz: Die Transformation einer Funktion mit mehreren Argumenten in eine Kette von Funktionen, die jeweils ein einzelnes Argument akzeptieren.


Quick-Check

  1. Gibt es das in Java?
    Schwerfällig. Mit Lambdas geht es, sieht aber hässlich aus. Python und JS können es, brauchen aber oft Libraries (Lodash _.curry) oder Arrow-Functions a => b => a+b.
  2. Unterschied zu Partial Application?
    Haarspalterei. Currying macht immer 1-Argument-Ketten. Partial Application fixiert einige Argumente (z. B. die ersten 3 von 5) und gibt den Rest zurück. In der Praxis nutzen wir meist Partial Application und nennen es Currying.
  3. Performance?
    Schlechter. Jeder Funktionsaufruf kostet CPU-Zeit (Stack Frame). add(2,3) ist schneller als add(2)(3). Aber wir optimieren auf Lesbarkeit, nicht Nanosekunden.