Научите колико флексибилне ЈаваСцрипт функције могу бити и како их можете користити за креирање флексибилног кода за вишекратну употребу.
ЈаваСцрипт је моћан језик који подржава већина модерних претраживача и одличан је избор за почетнике.
Баш као и многи други модерни програмски језици, ЈаваСцрипт подржава функције које вам омогућавају да изолујете блок кода и поново га користите негде другде. Такође можете користити функције додељивања променљивим и прослеђивати их као параметре, као и друге вредности.
Шта су функције вишег реда?
Најједноставнија дефиниција за функцију вишег реда је функција која извршава операције над другим функцијама прихватајући их као параметре или их враћајући. Функције вишег реда се у великој мери користе у парадигма функционалног програмирања. Ако сте тек почињем са ЈаваСцрипт-ом, функције вишег реда би могле бити мало тешке за разумевање.
Размотрите следећи пример:
функцијапреобразити(фн) {
дозволити ресултАрраи = [];повратакфункција (низ) {
за (дозволити и = 0; и < арраи.ленгтх; и++) {
ресултАрраи.пусх (фн (низ[и]))
}
повратак ресултАрраи
}
}
У блоку кода изнад, тхе преобразити функција је функција вишег реда која преузима фн функција као параметар и враћа анонимну функцију која преузима низ као параметар.
Сврха је преобразити функција је да модификује елементе у низу. Прво, код дефинише променљиву ресултАрраи и везује га за празан низ.
Тхе преобразити функција враћа анонимну функцију која пролази кроз сваки елемент у низ, затим прослеђује елемент у фн функцију за израчунавање и гура резултат у ресултАрраи. Након завршетка петље, анонимна функција враћа ресултАрраи.
конст функција1 = трансформација((Икс) => Икс * 2)
конзола.лог (функција1([ 2, 3, 4, 5, 6 ])) /* [ 4, 6, 8, 10, 12] */
Блок кода изнад додељује анонимну функцију коју враћа преобразити функцију на константну променљиву функција1. фн враћа производ од Икс који је замена за низ[и].
Код такође прослеђује низ, као параметар за функција1 а затим евидентира резултат на конзоли. Краћи начин писања би био:
конзола.лог (трансформ ((Икс) => Икс * 2)([ 2, 3, 4, 5, 6 ]))
ЈаваСцрипт има уграђену функцију вишег реда која у основи ради исту ствар као преобразити, о чему ћемо касније.
Надамо се да почињете да схватате како функционишу функције вишег реда у ЈаваСцрипт-у. Погледајте следећу функцију и видите да ли можете да погодите шта ради.
функцијафилтерАндТрансформ(фн, арраиТоБеФилтеред, услов) {
дозволити филтередАрраи = [];за (дозволити и = 0; и < арраиТоБеФилтеред.ленгтх; и++) {
ако (услов (арраиТоБеФилтеред[и])) {
дозволити и = трансформ (фн)([ арраиТоБеФилтеред[и] ])[0]
филтередАрраи.пусх (и)
} друго {
филтередАрраи.пусх (арраиТоБеФилтеред[и])
}
}
повратак филтередАрраи
}
Овај блок кода дефинише функцију која ради оно што можда сумњате — проверава елементе у низу који испуњавају одређени услов и трансформише их помоћу преобразити() функција. Да бисте користили ову функцију, урадите нешто овако:
филтерАндТрансформ((Икс) => Икс * 2, [ 1, 2, 3, 4, 5 ], (к) => к % 20)
за разлику од преобразити функција, Тхе филтерАндТрансформ функција узима две функције као параметре: фн и стање. Тхе стање функција проверава да ли је параметар прошао, да ли је паран број и враћа тачно. У супротном, враћа се нетачно.
Ако стање разрешава у истинито (услов је испуњен), тек тада је преобразити функција зове. Ова логика би могла бити од користи ако радите са низом и желите да трансформишете одређене елементе. Ако покренете овај код у конзоли претраживача, требало би да добијете следећи одговор:
[ 1, 4, 3, 8, 5 ]
Можете видети да функција само трансформише елементе који испуњавају одређени услов, остављајући елементе који не испуњавају услов, онаквима какви јесу.
Функција вишег реда Арраи.мап() у ЈаваСцрипт-у
Методе низа као што је мап() су функције вишег реда које олакшавају манипулисање низовима. Ево како то функционише.
дозволити низ = [ 1, 2, 3, 4, 5 ];
дозволити трансформедАрраи = арраи.мап((Икс) => Икс * 2);
Када се пријавите трансформедАрраи у конзоли претраживача, требало би да добијете исти резултат који сте добили са преобразити функција поменута раније:
[ 2, 4, 6, 8, 10 ]
арраи.мап() узима два параметра, први параметар се односи на сам елемент, док се други параметар односи на индекс елемента (позицију у низу). Са само арраи.мап() можете постићи исте резултате као филтерАндТрансформ функција. Ево како то радите:
дозволити низ = [ 1, 2, 3, 4, 5 ];
дозволити трансформедАрраи = арраи.мап((Икс) => Икс % 20? Икс * 2: Икс);
У блоку кода изнад, функција враћа производ тренутног елемента и 2, ако је елемент паран. У супротном, враћа елемент нетакнут.
Са уграђеним Мапа функцију, успели сте да елиминишете потребу за неколико линија кода, што је резултирало много чистијим кодом и мањим шансама за појављивање грешака.
Функција Арраи.филтер() у ЈаваСцрипт-у
Када позовете филтер метода на низу, уверите се да је повратна вредност функције коју проследите у метод или тачна или нетачна. Тхе филтер метода враћа низ који садржи елементе који испуњавају прослеђени услов. Ево како га користите.
функцијацхецкФирстЛеттер(реч) {
дозволити самогласници = "аеиоу"ако (самогласници.укључује(реч[0].тоЛоверЦасе())) {
повратак ворд;
} друго {
повратак;
}
}
дозволити речи = [ "Здраво", "од", "тхе", "деца", "од", "Планета", "Земља" ];
дозволити резултат = вордс.филтер((Икс) => цхецкФирстЛеттер (к))
Блок кода изнад прелази преко речи низ и филтрира било коју реч чије је прво слово самогласник. Када покренете код и пријавите се резултат променљиве, требало би да добијете следеће резултате:
[ 'од', 'Земља' ];
Функција Арраи.редуце() у ЈаваСцрипт-у
Тхе смањити() функција вишег реда узима два параметра. Први параметар је функција редукције. Ова функција редукције је одговорна за комбиновање две вредности и враћање те вредности. Други параметар је опциони.
Дефинише почетну вредност коју треба проследити функцији. Ако желите да вратите збир свих елемената у низу, можете да урадите следеће:
дозволити а = [ 1, 2, 3, 4, 5];
дозволити сума = 0;за (дозволити и = 0; и < а.ленгтх; и++) {
сума = сума + а[и];
}
конзола.лог (збир);
Ако покренете код, сум требало би да буде 15. Такође можете узети другачији приступ са смањити функција.
дозволити а = [ 1, 2, 3, 4, 5 ];
сума = а.редуце((ц, н) => ц + н);
конзола.лог (збир);
Блок кода изнад је много чистији у поређењу са претходним примером. У овом примеру, функција редукције узима два параметра: ц и н. ц односи се на тренутни елемент док н се односи на следећи елемент у низу.
Када се код покрене, функција редуктора пролази кроз низ, пазећи да додате тренутну вредност резултату из претходног корака.
Моћ функција вишег реда
Функције у ЈаваСцрипт-у су моћне, али функције вишег реда подижу ствари на виши ниво. Они се широко користе у функционалном програмирању, омогућавајући вам да са лакоћом филтрирате, смањите и мапирате низове.
Функције вишег реда могу вам помоћи да напишете више модуларног и вишекратно употребљивог кода када правите апликације.