„Истината винаги се намира в простотата, а не в множеството и объркването на нещата.“ ― ИсакНютон

Доброто приложение се познава по по-простите си взаимодействия за извършване на по-силни сложни операции. Но когато приложенията са толкова сложни, колкото днешните, простотата е по-трудна за постигане.

По-големите програми могат да бъдат по-трудни за разбиране и са по-податливи на грешки, така че те се разделят на по-малки и абстрахирани компоненти според техните опасения. Един начин да направим това е да абстрахираме „Акторите“ на нашия код, наречен Обектно-ориентиран стил, а другият начин е да абстрахираме „Динамиката“ на нашия код, наречен Функционален стил .

Функционалното програмиране е техника, дефинирана от Lambda Calculus за абстрактни функции, използвани за симулиране на Машини на Тюринг с една лента. Но ще видим как можем да използваме това в нашия обичаен Javascript, за да напишем по-добър и по-тестваем код.

Нека да видим как да опаковаме функции във функции (...и това става рекурсивно) в Javascript. Започвайки от дъното..

Изхвърляне на цикъла „за“ завинаги

Цикли For имаше, когато започнахме да се учим да кодираме, но те са по-малко четими и излишни, нека видим как можем да ги заменим с функции.

Проблем: Умножаване на всеки елемент от масив по 2

Използване на for цикъл

Използване на функцията Array.map

Ясно е, че горният метод е по-прост и по-чист. Няма нужда да помните откъде да започнете итератора „i“ и до каква стойност. Просто картографирайте масива и ще получим нов масив с всеки елемент, умножен по 2.

Проблем: Добавяне на „Hi“ към всяко име, започващо с „M“ в масив от имена и показване на получения масив като разделен със запетая низ.

Типичен начин за правене на това с помощта на цикли For

Правене с функционални конструкции

Циклите имат смисъл, когато мислите за индекси и места в паметта. Но това е, което прави компютърът, а не как хората мислят за проблемите, които искат да решат. Хората мислят какво искат да направят с всеки предмет. Така че кажете чао на for loops и започнете отново да мислите като човек.

Ами ако, няма "ако"

Този път нека го направим комплексен. :P

Проблем : Вземане на числа, които могат да бъдат напълно разделени на 3 от масив и след това добавяне на 1 към тях, ако някое число е разделено на 2, тогава добавете 1 към всички и ги отпечатайте, иначе ги отпечатайте както са.

Нека го разделим на стъпки

Pick up numbers divided by 3 from an array
Add 1 to them
If there are any numbers in that array that are divisible by 2 
Add 1 to them and Print them
If there are no numbers divisible by 2 in that array just print them.

Ако се прави с изявления „if else“.

Правете това правилно с функционалното програмиране

Както виждаме, неизползването на „if“ прави нашия код по-четлив и по-функционален. Същата логика може да се използва в нашите ежедневни конструкции на Javascript.

Неизменност

Когато говорим за функционално програмиране, неизменността е много важна. Проследяването на мутациите и поддържането на състоянието е това, което затруднява процеса на разработка на нашите приложения.

Неизменността поражда чисти функции, функции, които не произвеждат странични ефекти и връщат същия резултат за определена стойност всеки път, когато бъдат извикани, поради за това свойство изолираното тестване на функционални компоненти е много по-лесно и са възможни усъвършенствани техники като Функционална мемоизация. Стъпка напред ще ни завлече дълбоко в ламбда изчислението, така че повече за това по-късно.

Надявам се това да ви помогне да пишете по-чист код в Javascript, благодаря ви, че прочетохте това.