Currying in JavaScript

Ein sehr praktisches, wenn auch fast unbekanntes Feature in JavaScript, ist das sogenannte Currying.
Mit Currying lassen sich Funktionen mit mehreren Argumenten in neue Funktionen mit nur einem Parameter umwandeln.

Beispiel

Wir möchten ein paar Multiplikationen mit JavaScript durchführen, dann würde eine allgemeine Funktion wohl so aussehen:

function mul(a, b) {
    return a * b;
}
console.log(mul(2,3)); //Ergebnis = 6

Wenn jetzt weitere spezielle Funktionen benötigt werden, die eine beliebige Zahl beispielsweise immer mit 2 oder 5 multiplizieren, kann man entweder für jede spezielle Multiplikation eine neue Funktion deklarieren, oder man verwendet Currying und deklariert so nur eine generische Funktion.

Beispiel ohne Currying

function mul2(a) {
     return a * 2;
}
function mul5(a) {
     return a * 5;
}
 
console.log(mul2(2)); // Ergebnis = 4
console.log(mul2(3)); // Ergebnis = 6
 
console.log(mul5(2)); // Ergebnis = 10
console.log(mul5(3)); // Ergebnis = 15

Beispiel mit Currying

function mulGeneric(a) {
    return function(b) {
        return a * b;
    }
}
 
var mul2 = mulGeneric(2);
console.log(mul2(2)); // Ergebnis = 4
console.log(mul2(3)); // Ergebnis = 6
 
var mul5 = mulGeneric(5);
console.log(mul5(2)); // Ergebnis = 10
console.log(mul5(3)); // Ergebnis = 15
Share

Funktionen deklarieren leicht gemacht

Diese Schreibeweise bei der Deklaration von Funktion in JavaScript ist soweit ja jedem bekannt:

1
2
3
function myFunction () {
    console.log('myFunction was called');
}

Das Interessante hierbei ist, das diese Art der Funktions-Deklartion eigentlich nur ein Alias ist, für folgende Schreibweise:

1
2
3
var myFunction = function() {
    console.log('myFunction was called');
}

Also vorsicht bei Benennung von Funktion und Variablen!

Share