Currying ist eine der übergeordneten Funktionen von Java Script.
Currying ist eine Funktion mit vielen Argumenten, die so umgeschrieben wird, dass sie das erste Argument nimmt und eine Funktion zurückgibt, die wiederum die übrigen Argumente verwendet und den Wert zurückgibt.
Verwirrt?
Sehen wir uns ein Beispiel an,
function add(a,b)
{
return a+b;
}
add(5,6);
Dies ist vergleichbar mit der folgenden Currying-Funktion,
function add(a)
{
return function(b){
return a+b;
}
}
var curryAdd = add(5);
curryAdd(6);
Was bedeutet dieser Code also?
Lesen Sie nun die Definition noch einmal,
Currying ist eine Funktion mit vielen Argumenten, die so umgeschrieben wird, dass sie das erste Argument übernimmt und eine Funktion zurückgibt, die wiederum die übrigen Argumente verwendet und den Wert zurückgibt.
Immer noch verwirrt? Lassen Sie mich das erklären!
Wenn Sie diese Funktion aufrufen,
var curryAdd = add(5);
Sie erhalten dann eine Funktion wie diese,
curryAdd=function(y){return 5+y;}
Dies wird also als Funktionen höherer Ordnung bezeichnet. Das heißt, der Aufruf einer Funktion, die wiederum eine andere Funktion zurückgibt, ist eine genaue Definition für eine Funktion höherer Ordnung. Dies ist der größte Vorteil für die Legende Java Script. Kommen wir also zurück zum Currying,
Mit dieser Zeile wird das zweite Argument an die Funktion curryAdd übergeben.
curryAdd(6);
was wiederum zur Folge hat,
curryAdd=function(6){return 5+6;}
// Which results in 11
Ich hoffe, Sie verstehen die Verwendung von Curry hier. Kommen wir also zu den Vorteilen,
Warum Currying?
Es nutzt die Wiederverwendbarkeit von Code. Weniger Code, weniger Fehler. Sie fragen sich vielleicht, wie es weniger Code ist?
Ich kann es mit den neuen ECMA-Skript 6-Feature-Pfeilfunktionen beweisen.
Ja! ECMA 6 bietet uns die wunderbare Funktion der Pfeilfunktionen,
function add(a)
{
return function(b){
return a+b;
}
}
Mit Hilfe der Pfeilfunktion können wir die obige Funktion wie folgt schreiben,
x=>y=>x+y
Cool, oder?
Also, weniger Code und weniger Bugs!
Mit Hilfe dieser Funktionen höherer Ordnung kann man leicht einen fehlerfreien Code entwickeln.
Ich fordere Sie heraus!
Ich hoffe, Sie haben verstanden, was Curry ist. Bitte zögern Sie nicht, hier zu kommentieren, wenn Sie weitere Erklärungen benötigen.
Danke, einen schönen Tag noch!
13 Stimmen
[Gemäß der Definition einer kartesischen geschlossenen Kategorie gibt es eine fest Familie von Adjunktionen (natürlich parametrisiert durch A) zwischen X -> X x A und X -> X ^ A. Die Isomorphismen hom(X x A, Y) <-> hom(X, Y^A) sind die
curry
yuncurry
Funktionen von Haskell. Wichtig ist hier, dass diese Isomorphismen von vornherein festgelegt und somit in die Sprache "eingebaut" sind.3 Stimmen
Es gibt ein schönes Tutorial hier für currying in haskell learnyouahaskell.com/higher-order-functions#curried-functions Kurzkommentare sind, dass
add x y = x+y
(curried) ist anders alsadd (x, y)=x+y
(ohne Eile)