> LeekScript-Tutorial
*Diese Seite ist teilweise veraltet. In Leekscript wird Currying nur verwendet, um den Code lesbarer zu machen, es spart keine Operationen mehr, da die Kosten für einen Aufruf einer Funktion unabhängig von der Anzahl der Parameter auf 1 reduziert werden. *
In der funktionalen Programmierung bezieht sich Currying auf die Operation, die eine Funktion mit mehreren Argumenten in eine Funktion mit einem Argument umwandelt und eine Funktion zurückgibt, die den Rest der Argumente übernimmt. Der umgekehrte Vorgang ist offensichtlich möglich und wird als Decurryfizierung bezeichnet.
Der Begriff leitet sich vom Namen des amerikanischen Mathematikers Haskell Curry ab.
Nehmen wir eine Funktion, die 2 Argumente akzeptiert und die Summe der 2 zurückgibt:
Funktion add(x, y) { gib x+y zurück; }
Verwandelt sich in Curry-Methode
Funktion add_curried(x) { Rückgabefunktion(y) { gib x+y zurück; }; }
Anwendungsbeispiel
//Klassische Methode var summe = addieren (1, 3);
//Curry-Methode var add1 = add_curried (1); var summe = add1(3);
Dieses Beispiel soll nur zeigen, wie es funktioniert, in diesem Fall macht es keinen Sinn, durch Curry zu gehen. Sehen wir uns ein weiteres, interessanteres Beispiel an. Stellen Sie sich vor, wir haben ein Array mit n numerischen Elementen und möchten zu allen Elementen 1 addieren.
//Klassische Methode for(var Schlüssel:var Element im Array) { array[key] = add(1, element); }
//Curry-Methode var add1 = add_curried (1); for(var Schlüssel:var Element im Array) { array[key] = add1(element); }
Der Vorteil liegt hier in der Optimierung, in der Schleife rufen wir statt einer Funktion mit 2 Parametern nur eine Funktion mit einem Parameter auf. Je größer die Anzahl der Elemente im Array ist, desto größer ist die Verstärkung.
Wie wir bereits gesehen haben, werden sie hauptsächlich für Funktionen verwendet, die in Schleifen aufgerufen werden und von denen einer oder mehrere Parameter nicht von der Schleife abhängen. Memoisierung ist ein perfektes Anwendungsbeispiel.
Nehmen Sie zum Beispiel unsere lineOfSight-Funktion mit Memoisierung (definiert hier):
Wenn wir diese Funktion in einer Schleife aufrufen, belasten uns die beiden Operationen! Currification kann uns helfen:
Unsere Funktion gibt eine andere Funktion zurück, die die Parameter der ersten verwenden kann, es ist beim ersten Mal etwas schwierig zu verstehen, aber gut angewendet ist diese Methode sehr effektiv! Eine kleine Übung: Wir können diese Funktion noch weiter optimieren, Sie müssen herausfinden, wie!
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.