Currying (in der Linguistik auch Schönfinkeln genannt) ist die Umwandlung einer Funktion mit mehreren Argumenten in eine Kette von Funktionen, die jeweils genau ein Argument entgegennehmen. Statt f(a, b) schreibt man f(a)(b): Der Aufruf mit dem ersten Argument liefert eine neue Funktion, die auf das zweite Argument wartet.

Herkunft und Name

Das Verfahren geht auf den Logiker Moses Schönfinkel (1924) zurück und wurde später von Haskell Curry aufgegriffen — nach ihm ist die Technik benannt. Auch Gottlob Frege hatte die Idee bereits vorweggenommen. Currying ist ein Kernkonzept der Lambda-Kalkül-basierten Sicht auf Funktionen.

Beispiel

In Haskell ist Currying die Standardform — jede Funktion ist eigentlich einstellig:

add :: Int -> Int -> Int
add x y = x + y

add3 = add 3      -- teil-appliziert: wartet auf das zweite Argument
add3 4            -- Ergebnis: 7

In JavaScript lässt sich Currying direkt als Kette von Pfeilfunktionen schreiben:

const add = a => b => a + b;
add(3)(4);        // 7
const add3 = add(3);
add3(4);          // 7

Currying und partielle Applikation

Currying zerlegt eine n-stellige Funktion in n einstellige Funktionen. Die partielle Applikation dagegen belegt nur einen Teil der Argumente vor und lässt den Rest offen — beide Techniken basieren auf Closures und sind eng verwandt, aber nicht identisch. Currying erleichtert Wiederverwendung und Funktionskomposition: einmal gebaute Zwischenfunktionen lassen sich an vielen Stellen einsetzen.

Zusammenhang mit funktionalen Konzepten

Verwandte Grundlagen: Funktion, Rekursion.