Ennek a funkcionális technikának az alkalmazása elegánsabbá teheti a kódot

A funkcionális programozás technikákat ad a kódunk problémáinak megoldására. Ezek egyike, a részleges alkalmazás, kissé trükkös megérteni, de lehetővé teheti számunkra, hogy kevesebbet írjunk belőle (érdekesnek tűnik, igaz?).
Mi az?
A részleges alkalmazás egy funkcióval indul. Vesszük ezt a függvényt, és létrehozunk egy újat, amelynek egy vagy több argumentuma már „be van állítva” vagy részben alkalmazva . Ez furcsán hangzik, de csökkenti a funkcióinkhoz szükséges paraméterek számát.
Adjunk néhány összefüggést arról, hogy mikor alkalmazhatnánk részleges alkalmazást:
const list = (lastJoin, ...items) => { const commaSeparated = items.slice(0,-1).join(", "); const lastItem = items.pop(); return `${commaSeparated} ${lastJoin} ${lastItem}`;}
Ez a kis funkció egyetlen szót vesz fel lastJoin
, és tetszőleges számú items
. Kezdetben list
egy commaSeparated
változót deklarál . Ez a változó az összes kivételével vesszővel elválasztott összekapcsolt tömböt tárol. A következő sorban az utolsó elemet items
egy lastItem
változóban tároljuk . Ezután a függvény visszatér egy karakterlánc sablon segítségével.
Ezután a függvény items
karakterláncként adja vissza a formátumot. Például:
list("and", "red", "green", "blue"); // "red, green and blue"list("with", "red", "green", "blue"); // "red, green with blue"list("or", "red", "green", "blue"); // "red, green or blue"
Funkciónk list
segítségével listákat készíthetünk, amikor csak akarjuk. Az általunk létrehozott listatípusok, „és”, „együtt”, „vagy” az általános list
függvény szakterülete . Nem lenne jó, ha saját funkcióik lennének ?!
A részleges alkalmazás használata
Ebben segíthet a részleges alkalmazás. Például egy listAnd
függvény elkészítéséhez az „és” argumentumot „beállítjuk” (vagy részben alkalmazzuk ) lastJoin
. Ennek eredménye azt jelenti, hogy a részben alkalmazott függvényünket így hívhatjuk meg:
listAnd("red", "green", "blue"); // "red, green and blue"
Ebben sem kell megállni. Számos speciális függvényt készíthetünk, ha egy argumentumot részben alkalmazunk a listafüggvényünkre:
listOr("red", "green", "blue"); // "red, green or blue"listWith("red", "green", "blue"); // "red, green with blue"
Ehhez létre kell hoznunk egy partial
segédfunkciót:
const partial = (fn, firstArg) => { return (...lastArgs) => { return fn(firstArg, ...lastArgs); }}
Ez a függvény fn
az első és firstArg
a második paraméterként veszi fel a függvényt . Ez visszaad egy vadonatúj egy paraméterrel, lastArgs
. Ez összegyűjti az elfogadott érveket.
A listAnd
függvényünk megalkotásához a függvényünkben való partial
átadást list
és az utolsó csatlakozási szót hívjuk meg :
const listAnd = partial(list, "and");
Funkciónk listAnd
most csak egy tetszőleges tétellistát vesz fel. Ez a függvény meghíváskor viszont az átadott list
funkciót is meghívja . Láthatjuk, hogy az első érvként „és”, lastArgs
majd azután összegyűlt .
Most létrehoztunk egy részben alkalmazott függvényt. Programunkban újra és újra használhatjuk ezt a speciális funkciót:
listAnd("red", "green", "blue"); // "red, green and blue"
Tovább vitte
Az partial
általunk létrehozott funkció a részleges alkalmazás működésének bemutatása. Van néhány kiváló funkcionális JavaScript könyvtár, amelyek beépítették ezt a segédprogramot, például a Ramda JS.
Érdemes megjegyezni, hogy még akkor is, ha új ismeretekkel rendelkezik a részleges alkalmazásban, minden esély megvan arra, hogy használja. Ha valaha is használta a .bind()
módszert egy függvénynél, ez a részleges alkalmazás példája. Általános gyakorlat, this
hogy bekapcsolódnak a kontextus megadásához. A motorháztető alatt részben alkalmaz this
és új funkciót ad vissza.