Како се делимична апликација користи за побољшање ЈаваСцрипт кода

Коришћење ове функционалне технике може ваш код учинити елегантнијим

Функционално програмирање даје нам технике за решавање проблема у нашем коду. Једну од ових делимичних примена помало је незгодно разумети, али може нам омогућити да је напишемо мање (звучи занимљиво, зар не?).

Шта је то?

Делимична примена започиње функцијом. Узимамо ову функцију и креирамо нову са једним или више аргумената који су већ „постављени“ или делимично примењени . Ово звучи чудно, али смањиће број параметара потребних за наше функције.

Дајмо неки контекст око тога када бисмо могли да користимо делимичну апликацију:

const list = (lastJoin, ...items) => { const commaSeparated = items.slice(0,-1).join(", "); const lastItem = items.pop(); return `${commaSeparated} ${lastJoin} ${lastItem}`;}

Ова мала функција узима једну реч lastJoin, и произвољан број items. У почетку listдекларише commaSeparatedпроменљиву. Ова променљива чува придружен низ зарезом одвојених зарезом свих елемената осим последњег. У следећем реду чувамо последњу ставку у itemsу lastItemпроменљивој. Затим се функција враћа помоћу предлошка низа.

Функција затим враћа items, као низ, у формату листе. На пример:

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"

Наша listфункција омогућава нам да креирамо листе када желимо. Свака врста листе коју креирамо, „и“, „са“, „или“ је специјализација опште listфункције. Зар не би било лепо кад би могли бити своје функције ?!

Како се користи делимична примена

Овде делимична примена може да помогне. На пример, да бисмо направили listAndфункцију, „поставили смо“ (или делимично применимо ) lastJoinаргумент да буде „и“. Резултат овога значи да своју делимично примењену функцију можемо позвати овако:

listAnd("red", "green", "blue"); // "red, green and blue"

Ни ту не треба стати. Много специјализованих функција можемо направити делимичном применом аргумента на нашу функцију листе:

listOr("red", "green", "blue"); // "red, green or blue"listWith("red", "green", "blue"); // "red, green with blue"

Да бисмо то урадили, треба да креирамо partialуслужну функцију:

const partial = (fn, firstArg) => { return (...lastArgs) => { return fn(firstArg, ...lastArgs); }}

Ова функција узима функцију fnкао први параметар и firstArgкао други параметар . Враћа потпуно нову функцију са једним параметром, lastArgs. Ово скупља прослеђене аргументе.

Сада да бисмо направили своју listAndфункцију, позивамо се на partialпрослеђивање наше listфункције и нашу последњу придружену реч:

const listAnd = partial(list, "and");

Наша listAndфункција сада узима само произвољну листу предмета. Ова функција, када се позове, заузврат ће позвати прослеђену listфункцију. Можемо видети да ће бити додато „и“ као први аргумент, а окупљени lastArgsнакон тога.

Сада смо креирали делимично примењену функцију. Ову специјализовану функцију можемо користити изнова и изнова у нашем програму:

listAnd("red", "green", "blue"); // "red, green and blue"

Идући даље

partialФункција смо направили је да илуструје како делимична примена функционише. Доступне су неке сјајне функционалне ЈаваСцрипт библиотеке у које је уграђен овај услужни програм, као што је Рамда ЈС.

Вреди напоменути да чак и ако сте делимична апликација као концепт нови, постоје све шансе да сте је користили. Ако сте икада користили .bind()методу на функцији, ово је пример делимичне примене. Уобичајена је пракса да прелазимо thisу бинд да бисмо поставили његов контекст. Испод хаубе делимично примењује thisи враћа нову функцију.