Currying w JavaScript

jedną z zasad, które każdy programista stara się spełnić, jest DRY (Don ’ t Repeat YourSelf) , dzięki Currying zobaczymy, jak to zrobić z naszymi funkcjami jest dość proste i przydatne.

te treść opublikowałem jako pierwszy w moim biuletynie, tydzień po opublikowaniu newslettera zamieszczam na moim blogu, jeśli chcesz być pierwszym, który przeczyta subskrypcję

Banner posts

sposób, w jaki Zwykle piszemy nasze funkcje:

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

aby wykonać tę funkcję, musimy przekazać dwa argumenty, ale gdybyśmy chcieli mieć funkcję, która sprawdza wyłącznie, czy liczba jest parzysta, musielibyśmy napisać nową funkcję. Obecnie przydatne jest posiadanie funkcji currified.

zanim zrozumiemy, jak działa funkcja currified, musimy znać pewne pojęcia.

funkcje są obywatelami pierwszej klasy, co oznacza, że funkcje są obiektami, mogą być przekazywane jako argumenty, przechowywane w zmiennych i powrócić do innych funkcji, funkcje wyższego rzędu w JavaScript

jeden closure, gdy funkcja może zapamiętać i mieć dostęp do zakresu lexical, nawet gdy funkcja jest wykonywana poza zakresem lexical. Zrozumienie closures w JavaScript

jeśli funkcja otrzyma więcej niż jeden parametr, może zostać przepisana jako, funkcja, która pobiera parametr i zwraca funkcjęfunkcja z kolei otrzymuje parametr i zwraca wynik. Obliczanie lambda w JavaScript

¿Co To jest Currying?

Curry jest w stanie wywołać funkcję z mniejszą liczbą parametrów, niż można się spodziewać, zwraca funkcję, która czeka na pozostałe parametry i zwraca wynik.

w ten sposób możemy przepisać funkcję początku, jak

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

Aby wywołać tę funkcję, mamy dwie opcje

  • Wyślij argumenty, wykonując funkcje
divisible(10)(2)
  • Wyślij argument i uzyskać funkcję, która zapamiętaj ten argument
const divisibleEn3 = divisible(3);divisibleEn3(10)

Jak widzimy, napisz funkcję, currificada to nie jest trudne, ale możemy to zrobić trochę bardziej naturalnie, jak escribimoscualquier funkcji.

do tego możemy użyć Lodash lub Ramda, które mają metodę curry, która pozwala nam currificar dowolnej funkcji w ten sposób.

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

rozważmy przykład bardziej użyteczny wziął Mostly adequate guide to functional programming

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();// 

zalety Currying

  • możemy tworzyć nowe role, po prostu przekazując funkcje bazy i niektóre parametry.
  • możemy przekonwertować dowolną funkcję, która działała tylko z jednym elementem w pracy z listą envolviéndola na map.
  • można pisać małe fragmenty kodu, które są łatwiejsze do ponownego użycia.
  • łatwo o nich spekulować.
  • pisanie funkcji carrina pozwoli nam komponować funkcje.



+