Currying in JavaScript

Eines der Prinzipien, die jeder Programmierer einhalten möchte, ist TROCKEN (Wiederhole dich nicht ).

Dieser Inhalt habe ich zuerst in meinem Newsletter veröffentlicht, die Woche nach der Veröffentlichung des öffentlichen Newsletters in meinem Blog, wenn Sie der Erste sein möchten, der abonniert

 Bannerbeiträge

Die Art und Weise, wie wir normalerweise unsere Funktionen schreiben, ist:

//ES2015const divisible = (num, mod) => num % mod;//ES5var divisible = function(num, mod) { return num % mod;}

Um diese Funktion auszuführen, müssen wir zwei Argumente übergeben, aber wenn wir eine Funktion haben wollten, die ausschließlich prüft, ob eine Zahl gerade ist, müssten wir eine neue Funktion schreiben. An dieser Stelle ist es nützlich, eine Curl-Funktion zu haben.

Denn bevor wir verstehen, wie eine Curl-Funktion funktioniert, müssen wir einige Konzepte kennen.

Funktionen sind erstklassige Bürger, dies bedeutet, dass Funktionen Objekte sind, Sie können sie als Argumente übergeben, in Variablen gespeichert und innerhalb anderer Funktionen zurückgegeben werden Funktionen hoher Ordnung in JavaScript

Ein Abschluss ist, wenn sich eine Funktion an einen lexikalischen Bereich erinnern und darauf zugreifen kann, auch wenn die Funktion außerhalb des lexikalischen Bereichs ausgeführt wird. Understanding closures in JavaScript

Wenn eine Funktion mehr als einen Parameter empfängt, kann sie wie folgt umgeschrieben werden: Eine Funktion, die einen Parameter annimmt und eine Funktion zurückgibt, empfängt wiederum einen Parameter und gibt das Ergebnis zurück. Ich berechne Lambda in JavaScript

¿ Was ist Currying?

Curry kann eine Funktion mit weniger Parametern als erwartet aufrufen, gibt eine Funktion zurück, die auf die verbleibenden Parameter wartet und das Ergebnis zurückgibt.

Auf diese Weise könnten wir die Funktion an den Anfang schreiben als

//ES2015const divisible = mod => num => num % mod;//ES5var divisible = function (mod) { return function (num) { return num % mod; }}

Zum Aufrufen dieser Funktion haben wir zwei Optionen

  • Übergeben Sie die Argumente, indem Sie die Funktionen ausführen
divisible(10)(2)
  • Übergeben eines Arguments und Empfangen einer Funktion, die sich an dieses Argument erinnert
const divisibleEn3 = divisible(3);divisibleEn3(10)

Wie wir eine Funktion schreiben currificada ist nicht kompliziert, aber wir könnten es ein bisschen natürlicher als escribimoscualquier Funktion tun.

Dazu können wir Lodash oder Ramda verwenden, die eine Curry-Methode haben, mit der wir jede Funktion auf diese Weise currifizieren können.

import { __, curry, map } from 'ramda';const composeNombre = curry( (primer, apellido) => `${primer} ${apellido}`);const familiaJaimes = composeNombre(__, 'Jaimes')const nombres = console.log(map(familiaJaimes, nombres))

Schauen wir uns ein nützlicheres Beispiel aus Mostly adequate guide to functional programming an

import { curry } from 'ramda';// Estas funciones las puedes conseguir dentro de Ramda o Lodashvar match = curry(function(what, str) { return str.match(what);});var replace = curry(function(what, replacement, str) { return str.replace(what, replacement);});var filter = curry(function(f, ary) { return ary.filter(f);});var map = curry(function(f, ary) { return ary.map(f);});var hasSpaces = match(/\s+/g);hasSpaces("hello world");// hasSpaces("spaceless");// nullfilter(hasSpaces, );// var findSpaces = filter(hasSpaces);// function(xs) { return xs.filter(function(x) { return x.match(/\s+/g) }) }findSpaces();// 

Vorteile des Curryings

  • Wir können neue Funktionen erstellen, indem wir einfach unsere Basisfunktionen mit einigen Parametern übergeben.
  • Wir können jede Funktion, die mit einem einzelnen Element arbeitet, in eine Funktion umwandeln, die mit einer Liste arbeitet, indem wir sie in eine Karte einschließen.
  • Sie können kleine Codeteile schreiben, die einfacher wiederzuverwenden sind.
  • Es ist leicht, über sie nachzudenken.
  • Das Schreiben von Cursorfunktionen ermöglicht es uns, Funktionen zu komponieren.



+