Práca s čistými funkciami môže byť oveľa menej stresujúca, pretože ich môžete ľahko otestovať a uvažovať o nich s väčšou istotou.

Čisté funkcie sú funkcie, ktoré nevyvolávajú vedľajšie účinky a pri volaní s rovnakými vstupnými parametrami vždy vrátia rovnaký výstup.

Môžete použiť čisté funkcie, aby ste sa uistili, že váš kód je čistý, udržiavateľný a testovateľný. Tieto funkcie sú ideálne pre tieto úlohy, pretože sú predvídateľné a nemenia vonkajšie stavy.

Tiež sa ľahšie ladia, vďaka čomu sú užitočné pri vývoji zložitých softvérových systémov. Tu preskúmate čisté funkcie v JavaScripte, ich vlastnosti a výhody.

Charakteristika čistej funkcie

Pre funkciu aby bol „čistý“, musí spĺňať niekoľko požiadaviek.

Konštantná návratová hodnota

Čistá funkcia by mala vždy vrátiť rovnakú hodnotu pri rovnakom vstupe, bez ohľadu na to, koľkokrát bola volaná.

Zvážte napríklad funkciu nižšie:

funkciumnožiť(a, b) {
vrátiť a * b;
}

The množiť funkcia vo vyššie uvedenom príklade vždy vráti súčin svojich dvoch argumentov. Pri rovnakej množine argumentov má konštantnú návratovú hodnotu.

instagram viewer

Zavolaním tejto funkcie niekoľkokrát s rovnakými argumentmi vždy získate rovnaký výstup. Napríklad:

násobiť (2, 3); // vráti 6
násobiť (2, 3); // vráti 6
násobiť (2, 3); // vráti 6

Prípadne zvážte príklad nižšie:

funkciumultiplyRandomNumber(č) {
vrátiť číslo * Matematika.poschodie(Matematika.random() * 10);
}

multiplyRandomNumber(5); // Nepredvídateľné výsledky
multiplyRandomNumber(5); // Nepredvídateľné výsledky
multiplyRandomNumber(5); // Nepredvídateľné výsledky

The multiplyRandomNumber funkcia uvedená vyššie vráti iné výsledky zakaždým, keď ju zavoláte, čím sa stane nečistou. Výsledky tejto funkcie sú nepredvídateľné, takže testovanie komponentov, ktoré sa na ňu spoliehajú, je náročné.

Žiadne vedľajšie účinky

Čistá funkcia nesmie mať žiadne vedľajšie účinky. Vedľajší účinok sa týka akejkoľvek úpravy stavu alebo správania mimo rozsahu funkcie, ako je napríklad úprava globálnych premenných, výstup konzoly, sieťové požiadavky alebo manipulácia s DOM.

Keď má čistá funkcia vedľajší účinok, už nie je čistá, pretože ovplyvňuje vonkajší stav a porušuje zásadu, že nemá žiadne pozorovateľné vedľajšie účinky. Čisté funkcie sa preto vyhýbajú vedľajším účinkom, aby sa zabezpečilo, že nemenia stav programu.

Zvážte napríklad príklad nižšie:

nech počítať = 0;

funkciuprírastok() {
počet++;
konzoly.log (počet);
}

increment(); // Protokoly 1
increment(); // Protokoly 2
increment(); // Protokoly 3

The prírastok funkcia v tomto príklade má vedľajší účinok úpravy počítať premenná mimo jej rozsah. Tiež sa prihlási do konzoly.

Táto funkcia nie je čistá, pretože má vedľajší účinok, ktorý môže sťažiť predpovedanie jej výstupu a testovanie v izolácii. Ak chcete, aby bol čistý, môžete ho upraviť tak, aby sa v počítať premennú ako argument a vráti zvýšenú hodnotu bez úpravy akéhokoľvek externého stavu.

Ako:

funkciuprírastok(počítať) {
vrátiť počítať + 1;
}

prírastok (1); // vráti 2
prírastok (1); // vráti 2
prírastok (1); // vráti 2

Verzia prírastok funkcia vo vyššie uvedenom príklade nemá žiadne vedľajšie účinky, pretože nemodifikuje žiadnu externú premennú ani nezaznamenáva žiadnu hodnotu. Navyše, bez ohľadu na to, koľkokrát to zavoláte, vráti rovnakú hodnotu pre rovnaký vstup. Preto je to čistá funkcia.

Ďalšie charakteristiky

Okrem toho, že máte konštantnú návratovú hodnotu a nevyvolávate žiadne vedľajšie účinky, mali by ste, keď ste, dodržiavať nasledujúce pravidlá vytvorenie funkcie JavaScript že chceš byť čistý:

  • Vaša funkcia nesmie meniť žiadne zo svojich argumentov. Namiesto toho, ak nejaká operácia vyžaduje mutáciu, urobte kópiu argumentu a zmutujte kópiu.
  • Vaša funkcia musí mať vždy návratovú hodnotu. Ak vaša funkcia nemá návratovú hodnotu alebo žiadne vedľajšie účinky, nemôže nič urobiť!
  • Vaša funkcia nesmie závisieť od žiadneho vonkajšieho stavu.

Výhody čistých funkcií

Čisté funkcie majú určité výhody oproti nečistým funkciám, z ktorých niektoré zahŕňajú nasledujúce.

Testovateľnosť

Čisté funkcie sa dajú ľahko otestovať, pretože ich vstupno-výstupné správanie je dobre definované. Čisté funkcie tiež nezávisia od vonkajšieho stavu alebo vedľajších účinkov. Preto ich môžete testovať izolovane bez obáv z akýchkoľvek závislostí alebo interakcií s inými časťami programu.

Naproti tomu testovanie nečistých funkcií, ktoré závisia od externého stavu alebo produkujú vedľajšie účinky, môže byť náročnejšie, pretože ich správanie môže závisieť od stavu programu alebo iných vonkajších faktorov. To môže sťažiť vytváranie komplexných testovacích prípadov a zabezpečiť, aby sa funkcia správala správne vo všetkých scenároch.

Zapamätanie

Pretože čisté funkcie vždy produkujú rovnaký výstup pre rovnaký vstup a nevyvolávajú žiadne vedľajšie účinky, môžete si ich ľahko zapamätať.

Spoliehaním sa na tieto vlastnosti a použitím memoizácie môžete uložiť výsledok čistého volania funkcie pre konkrétny vstup. Vaša funkcia potom môže vrátiť výsledok uložený vo vyrovnávacej pamäti pri ďalšom volaní s rovnakým vstupom.

Zapamätanie čistých funkcií môže zlepšiť výkon programu, najmä pri drahých výpočtoch, ktoré opakovane pracujú s rovnakým vstupom, bez obáv z narušenia stavu programu.

Naopak, nečisté funkcie môžu produkovať rôzne výsledky pre rovnaký vstup v závislosti od stavu programu alebo vonkajších faktorov. To sťažuje ich zapamätanie, pretože výsledok uložený vo vyrovnávacej pamäti už nemusí byť platný, ak sa medzi volaniami zmenia závislosti funkcie alebo externý stav.

Súbeh

Keďže čisté funkcie nemodifikujú žiadny vonkajší stav ani nevyvolávajú žiadne vedľajšie účinky, sú bezpečné pre vlákna. Môžete ich spustiť súbežne bez toho, aby ste sa museli starať o podmienky pretekov alebo problémy so synchronizáciou.

Naopak, nečisté funkcie môžu byť náročné na súčasné vykonávanie, pretože sa môžu navzájom rušiť alebo spôsobiť neočakávané správanie, keď sa vykonávajú paralelne. Ak napríklad dve vlákna pristupujú k rovnakej globálnej premennej a upravujú ju, môžu si navzájom prepísať zmeny alebo spôsobiť nekonzistentné výsledky.

Čisté funkcie vs. Nečisté funkcie

Programy môžete písať pomocou kombinácie čistých a nečistých funkcií, pretože každý typ má svoje využitie.

Čisté funkcie sa ľahko optimalizujú, testujú a paralelizujú, vďaka čomu sú vhodné pre prípady použitia, ako je funkčné programovanie, ukladanie do vyrovnávacej pamäte, testovanie, paralelné programovanie a úlohy spracovania údajov.

Nečisté funkcie však predstavujú výzvy pri testovaní a súbežnosti, ale sú užitočné pri práci s meniteľnými dátovými štruktúrami alebo pri interakcii s externými systémami a zdrojmi.