Currying in JavaScript

az egyik alapelv, amelyet minden programozó igyekszik betartani, száraz (ne ismételje meg magát), a Currying segítségével meglátjuk, hogyan lehet ezt megtenni a funkcióinkkal, meglehetősen egyszerű és hasznos.

ez a tartalom tettem közzé először a hírlevél, A hét közzététele után a nyilvános hírlevél a blogomban, ha azt szeretné, hogy az első, hogy olvassa feliratkozás

Banner bejegyzések

a funkcióinkat általában úgy írjuk, hogy:

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

ennek a függvénynek a végrehajtásához két argumentumot kell átadnunk, de ha olyan függvényt akarunk, amely kizárólag ellenőrzi, hogy egy szám páros-e, akkor új függvényt kell írnunk. Ezen a ponton hasznos egy currifikált funkció.

mert mielőtt megértenénk, hogyan működik egy currified függvény, ismernünk kell néhány fogalmat.

a függvények első osztályú állampolgárok, ez azt jelenti, hogy a függvények objektumok, átadhatja őket argumentumként, változókban tárolva, és visszatérhet más függvényeken belül magas rendű funkciók JavaScript-ben

a lezárás az, amikor egy függvény képes emlékezni és hozzáférni egy lexikai hatókörhöz, még akkor is, ha a függvény a lexikai hatókörön kívül kerül végrehajtásra. A bezárások megértése a JavaScript-ben

ha egy függvény egynél több paramétert kap, akkor átírható úgy, hogy egy függvény vesz egy paramétert, és visszaad egy függvényt, viszont kap egy paramétert, és visszaadja az eredményt. A lambda-t JavaScript-ben számítom ki

¿mi a Currying?

a Curry képes meghívni egy függvényt kevesebb paraméterrel, mint amire számít, visszaad egy függvényt, amely megvárja a többi paramétert, és visszaadja az eredményt.

így tudjuk átírni a függvény az elején, mint

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

ennek a függvénynek a meghívására két lehetőségünk van

  • adja át az argumentumokat a függvények futtatásával
divisible(10)(2)
  • argumentum átadása és egy olyan függvény fogadása, amely emlékszik erre az argumentumra
const divisibleEn3 = divisible(3);divisibleEn3(10)

ahogy írunk egy függvény currificada nem bonyolult, de lehet, hogy ez egy kicsit természetesebb, mint escribimoscualquier funkció.

ehhez használhatjuk a lodash-t vagy a Ramda-t, akiknek curry-módszere van, amely lehetővé teszi számunkra, hogy bármilyen funkciót ilyen módon currifizáljunk.

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

nézzünk meg egy hasznosabb példát, amely a funkcionális programozás többnyire megfelelő útmutatójából származik

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

a Currying előnyei

  • új funkciókat hozhatunk létre, ha egyszerűen átadjuk az alapfunkciókat néhány paraméterrel.
  • bármely olyan függvényt, amely egyetlen elemmel működik, átalakíthatjuk egy listával működővé, ha térképbe csomagoljuk.
  • kis kódrészleteket írhat, amelyek könnyebben újrafelhasználhatók.
  • könnyű érvelni róluk.
  • a currified függvények írása lehetővé teszi a függvények összeállítását.



+