Currying in Java 8

Currying

Es hört sich orientalisch an, wie frisch aus der indischen Küche, hat aber nichts damit zu tun. Currying heißt so, weil es nach dem Mathematiker Haskell Brooks Curry benannt ist. Es wurde zwar nicht von ihm erfunden, aber soweit ausgearbeitet, dass es praktisch einsetzbar ist. (Die rein funktionale Programmiersprache Haskell basiert auch auf seiner Arbeit und wurde nach ihm benannt.)

Grob gesagt ist Currying die Umwandlung einer Funktion mit mehrere Argumenten in eine Funktion mit einem Argument durch Binden der Argumente an definierte Werte.

Etwas formaler lautet die Definition:

Es sei eine Funktion gegeben, die n Argumente erfordert. Wird diese auf ein Argument angewendet,  so konsumiert sie nur genau dieses und liefert als Funktionswert eine weitere Funktion, die noch n-1 Argumente verlangt. Die zurückgegebene Funktion wird anschließend auf alle weiteren Argumente angewendet. [1]

Um ein etwas besseres Verständnis zu bekommen, verwenden wir ein Haskell Beispiel:

In Java sieht die Syntax leider nicht so übersichtlich aus, weil Java keine mathematische (funktionale) Programmiersprache ist. Funktionale Aspekte wurden in die imperative Syntax eingegliedert.

Wie man sieht, ist die Java Variante nicht so übersichtlich wie in Haskell. Das Ergebnis ist aber dasselbe.

Wenn wir noch ein konkretes Beispiel geben wollen:

Wir rufen die Eintragsparser auf für eine Datei. Der Parser weiß nicht, welcher Gruppe die Einträge zugehören.

Der Parser kennt seine Umgebung nicht. Er kennt nur die Einträge, die er liest, weiß aber nicht, wie diese verarbeitet werden. Er ruft einfach die CallBack-Methode auf. Was mit den Einträgen passiert, interessiert ihn nicht. Dadurch haben wir die Verarbeitung und die Erkennung der Einträge entkoppelt.

[1] https://de.wikipedia.org/wiki/Currying

Verfasst von Senay Uzuner am 6. Juni 2017