Darbas su grynosiomis funkcijomis gali būti daug mažesnis, nes galite lengvai jas išbandyti ir drąsiau samprotauti.

Grynos funkcijos yra funkcijos, kurios nesukelia šalutinių poveikių ir, iškviestos naudojant tuos pačius įvesties parametrus, visada grąžins tą pačią išvestį.

Galite naudoti grynas funkcijas, kad įsitikintumėte, jog jūsų kodas yra švarus, prižiūrimas ir išbandomas. Šios funkcijos idealiai tinka šioms užduotims, nes jos yra nuspėjamos ir nekeičia išorinių būsenų.

Juos taip pat lengviau derinti, todėl jie naudingi kuriant sudėtingas programinės įrangos sistemas. Čia išnagrinėsite grynas JavaScript funkcijas, jų charakteristikas ir pranašumus.

Grynosios funkcijos charakteristikos

Dėl funkcija kad būtų „grynas“, jis turi atitikti keletą reikalavimų.

Pastovios grąžos vertė

Gryna funkcija visada turi grąžinti tą pačią reikšmę su ta pačia įvestimi, neatsižvelgiant į tai, kiek kartų ji iškviečiama.

Pavyzdžiui, apsvarstykite toliau pateiktą funkciją:

funkcijapadauginti(a, b) {
grąžinti a * b;
}
instagram viewer

The padauginti funkcija aukščiau pateiktame pavyzdyje visada pateiks savo dviejų argumentų sandaugą. Atsižvelgiant į tą patį argumentų rinkinį, jis turi pastovią grąžinimo vertę.

Iškvietus šią funkciją kelis kartus su tais pačiais argumentais, kiekvieną kartą bus gauta ta pati produkcija. Pavyzdžiui:

padauginti (2, 3); // grąžina 6
padauginti (2, 3); // grąžina 6
padauginti (2, 3); // grąžina 6

Arba apsvarstykite toliau pateiktą pavyzdį:

funkcijamultiplyRandomNumber(nr) {
grąžinti skaičius * Matematika.floor(Matematika.random() * 10);
}

multiplyRandomNumber(5); // Neprognozuojami rezultatai
multiplyRandomNumber(5); // Neprognozuojami rezultatai
multiplyRandomNumber(5); // Neprognozuojami rezultatai

The multiplyRandomNumber Aukščiau pateikta funkcija pateiks skirtingus rezultatus kiekvieną kartą ją iškvietus, todėl ji bus nešvari. Šios funkcijos rezultatai yra nenuspėjami, todėl sunku išbandyti komponentus, kurie ja remiasi.

Nėra šalutinio poveikio

Gryna funkcija neturi sukelti jokio šalutinio poveikio. Šalutinis poveikis reiškia bet kokį būsenos arba elgsenos pakeitimą, nepatenkančią į funkcijos sritį, pvz., visuotinių kintamųjų, konsolės išvesties, tinklo užklausų arba DOM manipuliavimo modifikavimą.

Kai gryna funkcija turi šalutinį poveikį, ji nebėra gryna, nes veikia išorinę būseną ir pažeidžia principą, kad nėra pastebimo šalutinio poveikio. Todėl grynos funkcijos išvengia šalutinių poveikių, kad užtikrintų, jog jos nepakeistų programos būsenos.

Pavyzdžiui, apsvarstykite toliau pateiktą pavyzdį:

leisti skaičiuoti = 0;

funkcijaprieaugis() {
skaičiuoti++;
konsolė.log (skaičiuoti);
}

padidėjimas (); // Žurnalai 1
padidėjimas (); // 2 žurnalai
padidėjimas (); // 3 žurnalai

The prieaugis funkcija šiame pavyzdyje turi šalutinį poveikį modifikuojant skaičiuoti kintamasis už jo taikymo srities ribų. Jis taip pat prisijungia prie konsolės.

Ši funkcija nėra gryna, nes ji turi šalutinį poveikį, dėl kurio gali būti sunkiau nuspėti jos išvestį ir atlikti bandymą atskirai. Jei norite, kad jis būtų grynas, galite jį modifikuoti, kad jis atitiktų skaičiuoti kintamąjį kaip argumentą ir grąžina padidintą reikšmę nekeisdamas jokios išorinės būsenos.

Kaip taip:

funkcijaprieaugis(skaičiuoti) {
grąžinti skaičiuoti + 1;
}

prieaugis (1); // grąžina 2
prieaugis (1); // grąžina 2
prieaugis (1); // grąžina 2

Versija prieaugis Aukščiau pateiktame pavyzdyje pateikta funkcija neturi šalutinio poveikio, nes nekeičia jokio išorinio kintamojo ir neregistruoja jokios reikšmės. Be to, nesvarbu, kiek kartų ją skambinsite, ji grąžina tą pačią tos pačios įvesties reikšmę. Todėl tai gryna funkcija.

Kitos charakteristikos

Be to, kad grąžinimo vertė yra pastovi ir nesukelia jokio šalutinio poveikio, turėtumėte laikytis šių taisyklių, kai sukurti JavaScript funkciją kad nori būti tyras:

  • Jūsų funkcija neturi keisti jokių savo argumentų. Vietoj to, jei kuriai nors operacijai reikia mutacijos, nukopijuokite argumentą ir pakeiskite kopiją.
  • Jūsų funkcija visada turi turėti grąžinimo reikšmę. Jei jūsų funkcija neturi grąžinimo reikšmės ar jokių šalutinių poveikių, ji nieko negali padaryti!
  • Jūsų funkcija neturi priklausyti nuo jokios išorinės būsenos.

Grynųjų funkcijų privalumai

Grynosios funkcijos turi tam tikrų pranašumų, palyginti su nešvariomis funkcijomis, kai kurios iš jų apima toliau nurodytus dalykus.

Bandomumas

Grynąsias funkcijas lengva patikrinti, nes jų įvesties / išvesties elgsena yra gerai apibrėžta. Be to, grynos funkcijos nepriklauso nuo išorinės būsenos ar šalutinio poveikio. Todėl galite juos išbandyti atskirai, nesijaudindami dėl priklausomybių ar sąveikos su kitomis programos dalimis.

Priešingai, nešvarių funkcijų, kurios priklauso nuo išorinės būsenos arba sukelia šalutinį poveikį, testavimas gali būti sudėtingesnis, nes jų elgsena gali priklausyti nuo programos būsenos ar kitų išorinių veiksnių. Dėl to gali būti sunkiau sukurti išsamius bandomuosius atvejus ir užtikrinti, kad funkcija tinkamai veiktų visais scenarijais.

Atmintinė

Kadangi grynos funkcijos visada sukuria tą pačią išvestį tai pačiai įvestis ir nesukelia šalutinių poveikių, galite jas lengvai įsiminti.

Pasikliaudami šiomis savybėmis ir naudodami atmintinę, galite talpykloje išsaugoti konkrečios įvesties funkcijos iškvietimo rezultatą. Tada jūsų funkcija gali grąžinti talpykloje išsaugotą rezultatą, kai kitą kartą bus iškviesta naudojant tą pačią įvestį.

Grynų funkcijų įsiminimas gali pagerinti programos našumą, ypač atliekant brangius skaičiavimus, kurie pakartotinai apdoroja tą pačią įvestį, nesijaudindami dėl trukdžių programos būsenai.

Priešingai, nešvarios funkcijos gali duoti skirtingus tos pačios įvesties rezultatus, atsižvelgiant į programos būseną arba išorinius veiksnius. Dėl to juos sunku įsiminti, nes talpykloje esantis rezultatas gali nebegalioti, jei funkcijos priklausomybės arba išorinė būsena keičiasi tarp skambučių.

Lygiagretumas

Kadangi grynos funkcijos nekeičia jokios išorinės būsenos ir nesukelia šalutinio poveikio, jos yra saugios. Galite juos paleisti vienu metu, nesijaudindami dėl lenktynių sąlygų ar sinchronizavimo problemų.

Priešingai, nešvarias funkcijas gali būti sudėtinga vykdyti vienu metu, nes jos gali trukdyti viena kitai arba sukelti netikėtą elgesį, kai vykdomos lygiagrečiai. Pavyzdžiui, jei dvi gijos pasiekia ir modifikuoja tą patį visuotinį kintamąjį, jos gali perrašyti viena kitos pakeitimus arba gauti nenuoseklius rezultatus.

Grynosios funkcijos vs. Nešvarios funkcijos

Galite rašyti programas naudodami grynų ir nešvarių funkcijų derinį, nes kiekvienas tipas turi savo paskirtį.

Grynąsias funkcijas lengva optimizuoti, tikrinti ir lygiagrečiai suderinti, todėl jos tinka naudoti, pavyzdžiui, funkcinio programavimo, talpyklos saugojimo, testavimo, lygiagretaus programavimo ir duomenų apdorojimo užduotis.

Tačiau nešvarios funkcijos kelia iššūkių atliekant testavimą ir suderinamumą, tačiau yra naudingos dirbant su kintančiomis duomenų struktūromis arba sąveikaujant su išorinėmis sistemomis ir ištekliais.