Ich hatte Mühe, ein reales Beispiel für die Verwendung der Curry-Funktion zu finden und den Vorteil der Verwendung von Curry zu nutzen.
Wenn ich die Curry-Funktion google, sehe ich oft das Beispiel wie
let add = x => y => x + y;
let add10 = add(10);
console.log(add10(20));
Ich muss sagen, dass ich den Wert der Verwendung von Curry in diesem Beispiel wirklich nicht sehe.
Nachdem ich die Antworten in diesem SO /programming/113780/javascript-curry-what-are-the-practical-applications gelesen habe, sehe ich immer noch keinen Nutzen darin, es zu verwenden.
Zum Beispiel gibt die Antwort mit der höchsten Punktzahl ein Beispiel für einen Konverter, aber dieses Beispiel kann ohne Curry umgeschrieben werden, wie eine andere Antwort zeigt.
Ich habe auch die Antworten durchgelesen. Was ist der Vorteil des Curry? (obwohl die Diskussion nicht auf Javascript beschränkt ist) Ich habe immer noch das Gefühl, dass die Curry-Version ohne Curry (in js) umgeschrieben werden kann.
Kann mir jemand den "echten" Vorteil / Nutzen der Verwendung von Curry in Javascript zeigen?
---- Update ----
Abgesehen von den Antworten, die ich erhalten habe, finde ich auch das Protokollbeispiel hier, das den Vorteil der Verwendung zeigt.
for
Schleife kann alswhile
Schleife umgeschrieben werden . Jedeif
Anweisung kann alswhile
Schleife umgeschrieben werden . Jedewhile
Schleife kann als umgeschrieben werdengoto
. Das heißt nicht, dass sie nicht nützlich sind.Antworten:
Ich habe selbst kaum Currying verwendet, aber hier ist ein aktuelles Beispiel, bei dem es sich als nützlich erwiesen hat. Ich habe für das Spiel Battlesnake programmiert , aber dies würde für viele Spiele gelten. Sie bieten Ihnen verschiedene Arrays, die den Standort Ihrer Schlange, der feindlichen Schlangen und des Futters angeben. Angenommen, Sie erwägen einen Umzug zu einem bestimmten {x, y} -Punkt und möchten überprüfen, ob er eine andere Schlange, ein anderes Futter oder sogar sich selbst enthält. Der erste Durchgang wäre, Code wie diesen zu schreiben (ich werde eine Mischung aus Funktion und neuen Pfeilen verwenden)
und irgendwo im Code gehen
Nicht schlecht, aber, da Sie dies an vielen Stellen in Ihrem Code tun werden, etwas langweilig und klobig. Und meiner Erfahrung nach ist es einfach, die beiden Argumente durcheinander zu bringen. :-( Das zugrunde liegende Problem ist, dass
some()
(oderfind()
) eine Funktion akzeptiert wird, die nur ein einziges Argument akzeptiert , und Sie wirklich zwei Argumente benötigen , die beiden Punkte. Sie denken also an Curry! Hier würden viele Pfeile verwenden, ich finde verschachtelte Funktionen klarer:Dann wird Ihr "Ist das Essen" -Test
Werden Sie dadurch ein Internet-Millionär? Wahrscheinlich nicht. Dies vereinfacht und verdeutlicht in diesem Fall Ihren Code.
quelle
Currying in Ihrem Beispiel macht nicht wirklich Sinn, da stimme ich zu. Um die Funktionalität des Curry zu sehen, müssen Sie es mit Funktionen höherer Ordnung kombinieren: Funktionen, die andere Funktionen als Parameter verwenden.
Das typischste Beispiel hierfür ist das Zuordnen, Filtern und Reduzieren. Eine weitere häufige Situation sind Rückrufe. Wenn Sie eine Funktion teilweise anwenden, können Sie die teilweise angewendete Funktion an diese Funktionen höherer Ordnung übergeben. Currying ist sinnvoll, wenn Sie eine Funktion meistens für eine Teilanwendung verwenden möchten, damit sie an eine andere Funktion höherer Ordnung übergeben werden kann.
Ein anschaulicheres Beispiel könnte folgendermaßen aussehen:
Currying ist niemals notwendig, ja, da Sie immer eine anonyme / Pfeil-Funktion aus einer regulären Funktion erstellen können, wenn Sie sie benötigen. In einigen Situationen kann es jedoch sehr praktisch sein, eine Curry-Funktion im Vergleich zu einer regulären Funktion zu haben (und in anderen Situationen ist es einfach Dinge nervig und langsam machen).
quelle
{}
, habe ich Builder-Klassen nicht als sehr nützlich oder allgemein empfunden . Können Sie einige Beispiele anführen?Object.assign()
es ziemlich einfach, von einer Basiskonfiguration abzuzweigen.