ET av prinsippene som hver programmerer søker Å overholde ER TØRR (Ikke Gjenta Deg selv), Med Currying vil vi se hvordan du gjør dette med våre funksjoner er ganske enkelt og nyttig.
dette innholdet publiserte jeg først i nyhetsbrevet mitt, uken etter publisering av det offentlige nyhetsbrevet i bloggen min, hvis du vil være den første til å lese abonner
måten vi normalt skriver våre funksjoner er:
//ES2015const divisible = (num, mod) => num % mod;//ES5var divisible = function(num, mod) { return num % mod;}
For å utføre denne funksjonen må vi passere to argumenter, men hvis vi ønsket å ha en funksjon som utelukkende sjekker om et tall er til og med, må vi skrive en ny funksjon. På dette punktet er det nyttig å ha en currified funksjon.
for før du forstår hvordan en currified funksjon fungerer, må vi kjenne noen begreper.
funksjoner er førsteklasses borgere, dette betyr at funksjoner er objekter, du kan sende dem som argumenter, lagret i variabler, og returnere i andre funksjoner Funksjoner av høy orden I JavaScript
en lukning er når en funksjon er i stand til å huske og få tilgang til et leksikalsk omfang, selv når funksjonen utføres utenfor det leksikalske omfanget. Forstå nedleggelser I JavaScript
hvis en funksjon mottar mer enn en parameter, kan den omskrives som en funksjon som tar en parameter og returnerer en funksjon, mottar i sin tur en parameter og returnerer resultatet. Jeg beregner lambda I JavaScript
¿Hva Er Currying?
Curry kan kalle en funksjon med færre parametere enn den forventer, den returnerer en funksjon som venter på de gjenværende parametrene og returnerer resultatet.
på denne måten kunne vi omskrive funksjonen til begynnelsen som
//ES2015const divisible = mod => num => num % mod;//ES5var divisible = function (mod) { return function (num) { return num % mod; }}
for å ringe denne funksjonen har vi to alternativer
- Pass argumentene ved å kjøre funksjonene
divisible(10)(2)
- Passerer et argument og motta en funksjon som husker dette argumentet
const divisibleEn3 = divisible(3);divisibleEn3(10)
som vi skriver en funksjon currificada er ikke komplisert, men vi kan gjøre det litt mer naturlig som escribimoscualquier funksjon.
For dette kan Vi bruke Lodash eller Ramda som har en karri-metode, som gjør at vi kan currify noen funksjon på denne måten.
import { __, curry, map } from 'ramda';const composeNombre = curry( (primer, apellido) => `${primer} ${apellido}`);const familiaJaimes = composeNombre(__, 'Jaimes')const nombres = console.log(map(familiaJaimes, nombres))
La oss se på et mer nyttig eksempel tatt Fra Det meste tilstrekkelig guide til funksjonell programmering
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();//
Fordeler Med Currying
- vi kan opprette nye funksjoner ved å bare passere våre basisfunksjoner med noen parametere.
- vi kan forvandle enhver funksjon som fungerer med et enkelt element til en som fungerer med en liste ved å pakke den inn i et kart.
- du kan skrive små kodebiter som er enklere å gjenbruke.
- det er lett å resonnere om dem.
- Skrive currified funksjoner vil tillate oss å komponere funksjoner.