So Curry-Funktionen in JavaScript
HeimHeim > Blog > So Curry-Funktionen in JavaScript

So Curry-Funktionen in JavaScript

Aug 17, 2023

Diese JavaScript-Sprachfunktion kann Ihnen helfen, Ihren Code aufzuräumen und Ihnen ein neues Verständnis für die Funktionsweise von Funktionen zu vermitteln.

Curry-Funktionen können dazu beitragen, Ihren JavaScript-Code lesbarer und ausdrucksvoller zu machen. Die Currying-Technik ist ideal, wenn Sie komplexe Logik in kleinere, eigenständige und besser verwaltbare Codeteile zerlegen möchten.

Erfahren Sie alles über Curry-Funktionen in JavaScript, wie Sie die Funktions-Currying-Technik verwenden, um teilweise angewendete Funktionen zu erstellen, sowie reale Anwendungsfälle sowohl für Curry-Funktionen als auch für teilweise angewendete Funktionen.

Currying ist nach dem Mathematiker Haskell B. Curry benannt und das Konzept leitet sich von der Lambda-Kalküle ab. Currying nimmt eine Funktion, die mehr als einen Parameter empfängt, und zerlegt sie in eine Reihe unärer (Ein-Parameter-)Funktionen. Mit anderen Worten: Eine Curry-Funktion benötigt jeweils nur einen Parameter.

Unten finden Sie ein Beispiel für eine Curry-Funktion:

DerbuildSandwich()Die Funktion gibt eine andere Funktion zurück – eine anonyme Funktion, die die empfängtZutat2 Streit. Dann gibt diese anonyme Funktion eine andere anonyme Funktion zurück, die empfängtZutat3 . Schließlich gibt diese letzte Funktion das Vorlagenliteral zurück, eine Möglichkeit zum Formatieren von Zeichenfolgen in JavaScript.

Was Sie erstellt haben, ist eine verschachtelte Funktion, bei der jede Funktion die darunter liegende Funktion aufruft, bis wir das Ende erreichen. Wenn Sie jetzt anrufenbuildSandwich()und ihm einen einzelnen Parameter übergeben, wird der Teil der Funktion zurückgegeben, dessen Argumente Sie noch angeben müssen:

Sie können der Ausgabe entnehmen, dass buildSandwich eine Funktion zurückgibt:

Um den Funktionsaufruf abzuschließen, müssen Sie alle drei Argumente angeben:

Dieser Code übergibt „Bacon“ an die erste Funktion, „Lettuce“ an die zweite und „Tomato“ an die letzte Funktion. Mit anderen Worten, diebuildSandwich()Die Funktion ist eigentlich in drei Funktionen unterteilt, wobei jede Funktion nur einen Parameter erhält.

Während es völlig in Ordnung ist, mit den traditionellen Funktionen zu curryen, kann die ganze Verschachtelung ziemlich hässlich werden, je tiefer man vordringt. Um dies zu umgehen, können Sie Pfeilfunktionen verwenden und deren sauberere Syntax nutzen:

Diese überarbeitete Version ist prägnanter, ein Vorteil der Verwendung von Pfeilfunktionen gegenüber regulären Funktionen. Sie können die Funktion auf die gleiche Weise aufrufen wie die vorherige:

Teilweise angewendete Funktionen sind eine häufige Verwendung von Currying. Bei dieser Technik werden jeweils nur die benötigten Argumente bereitgestellt (anstatt alle Argumente bereitzustellen). Immer wenn Sie eine Funktion aufrufen, indem Sie alle erforderlichen Parameter übergeben, sagen Sie, dass Sie diese Funktion „angewandt“ haben.

Schauen wir uns ein Beispiel an:

Unten ist die Curry-Version von Multiply:

DercurriedMultiply()Funktion empfängt dieXArgument für die erste Funktion undjFür die zweite Funktion werden dann beide Werte multipliziert.

Um die erste teilweise angewendete Funktion zu erstellen, rufen Sie aufcurriedMultiple()mit dem ersten Parameter und weisen Sie die zurückgegebene Funktion einer Variablen zu:

Zu diesem Zeitpunkt wurde der Code „teilweise angewendet“.curriedMultiply() Funktion. Sie können also jederzeit anrufentimesTen(),Sie müssen ihm nur eine Zahl übergeben und die Zahl wird automatisch mit 10 multipliziert (was in der angewendeten Funktion gespeichert wird):

Auf diese Weise können Sie auf einer einzelnen komplexen Funktion aufbauen, indem Sie daraus mehrere benutzerdefinierte Funktionen erstellen, von denen jede ihre eigene Funktionalität hat.

Schauen Sie sich ein Beispiel an, das einem echten Anwendungsfall für die Webentwicklung näher kommt. Unten haben Sie eineupdateElemText()Funktion, die ein Element übernimmtAusweisbeim ersten Aufruf den Inhalt beim zweiten Aufruf und aktualisiert dann das Element basierend auf demAusweisund Inhalt, den Sie bereitgestellt haben:

Eine weitere häufige Verwendung von Curry ist die Funktionskomposition. Auf diese Weise können Sie kleine Funktionen in einer bestimmten Reihenfolge aufrufen und sie zu einer einzigen, komplexeren Funktion kombinieren.

In einer hypothetischen E-Commerce-Website sind beispielsweise die folgenden drei Funktionen aufgeführt, die Sie nacheinander (in präziser Reihenfolge) ausführen möchten:

Beachten Sie, dass dieser Code das verwendetlassenSchlüsselwort zum Definieren desBestellung abschließen() Funktion. Dies ermöglicht Ihnen, der Variablen einen Wert neu zuzuweisen und ist Teil der Scoping-Funktion in JavaScript.

Als Nächstes müssen Sie die Funktionen in umgekehrter Reihenfolge (von innen nach außen) aufrufen, da Sie zuerst die Kunden hinzufügen möchten:

Dadurch erhalten Sie die folgende Ausgabe:

Wenn Sie die oben genannten Funktionen auf normale Weise schreiben würden, würde der Code etwa so aussehen:

Wenn Sie anrufenaddCustomer()Funktion hinzufügen und die Argumente übergeben, beginnen Sie von innen und arbeiten sich nach außen bis zum Anfang der Funktion vor.

Wenn Sie Curry-Funktionen häufig verwenden möchten, können Sie den Prozess mit einer Hilfsfunktion optimieren.

Diese Funktion wandelt jede normale Funktion in eine Curry-Funktion um. Es verwendet Rekursion, um eine beliebige Anzahl von Argumenten zu verarbeiten.

Diese Funktion akzeptiert jede standardmäßig geschriebene Funktion, die mehr als einen Parameter empfängt, und gibt eine Curry-Version dieser Funktion zurück. Um es in Aktion zu sehen, verwenden Sie diese Beispielfunktion, die drei Parameter nimmt und sie addiert:

Um diese Funktion zu konvertieren, rufen Sie die aufCurry()Funktion und Passgesamtals Argument:

Um nun die Funktion aufzurufen, müssen Sie nur noch alle Argumente übergeben:

Die Funktionen von JavaScript sind äußerst flexibel und Currying-Funktionen sind nur ein kleiner Teil davon. Es gibt viele andere Arten von Funktionen wie Pfeilfunktionen, Konstruktorfunktionen und anonyme Funktionen. Sich mit diesen Funktionen und ihren Komponenten vertraut zu machen, ist der Schlüssel zur Beherrschung von JavaScript.

Kingsley ist ein freiberuflicher Webentwickler aus Nigeria. Er schreibt seit über 3 Jahren professionell JavaScript und Node.js. In dieser Zeit hat er mit Kunden aus der ganzen Welt zusammengearbeitet. Kingsley bildet Entwickler auch durch seine Texte weiter. Er schreibt für mehrere technologiebasierte Publikationen und Agenturen, darunter FreeCodeCamp, Tutsplus, ContentLab und MakeUseOf.

buildSandwich()Zutat2Zutat3buildSandwich()buildSandwich()curriedMultiply()XjcurriedMultiple()curriedMultiply()timesTen(),updateElemText()AusweisAusweislassenBestellung abschließen()addCustomer()Curry()gesamt