Darbs ar tīrām funkcijām var būt daudz mazāk stresa, jo varat tās viegli pārbaudīt un pārliecināties par tām.
Tīrās funkcijas ir funkcijas, kas nerada blakusparādības un, izsaucot ar tiem pašiem ievades parametriem, vienmēr atgriezīs to pašu izvadi.
Varat izmantot tīras funkcijas, lai nodrošinātu, ka kods ir tīrs, apkopjams un pārbaudāms. Šīs funkcijas ir ideāli piemērotas šiem uzdevumiem, jo tās ir paredzamas un nemaina ārējos stāvokļus.
Tos ir arī vieglāk atkļūdot, tāpēc tie ir noderīgi sarežģītu programmatūras sistēmu izstrādē. Šeit jūs izpētīsit tīras JavaScript funkcijas, to īpašības un priekšrocības.
Tīras funkcijas raksturojums
Priekš funkcija lai tas būtu “tīrs”, tam ir jāatbilst dažām prasībām.
Pastāvīga atdeves vērtība
Tīrai funkcijai vienmēr ir jāatgriež viena un tā pati vērtība, izmantojot to pašu ievadi, neatkarīgi no tā izsaukšanas reižu skaita.
Piemēram, apsveriet tālāk norādīto funkciju.
funkcijuvairoties(a, b) {
atgriezties a * b;
}
The vairoties funkcija iepriekš minētajā piemērā vienmēr atgriezīs savu divu argumentu reizinājumu. Ņemot vērā to pašu argumentu kopu, tai ir nemainīga atgriešanas vērtība.
Izsaucot šo funkciju vairākas reizes ar vieniem un tiem pašiem argumentiem, katru reizi tiks iegūta viena un tā pati izvade. Piemēram:
reizināt (2, 3); // atgriež 6
reizināt (2, 3); // atgriež 6
reizināt (2, 3); // atgriež 6
Alternatīvi apsveriet tālāk sniegto piemēru:
funkcijumultiplyRandomNumber(num) {
atgriezties num* Matemātika.floor(Matemātika.random() * 10);
}
multiplyRandomNumber(5); // Neprognozējami rezultāti
multiplyRandomNumber(5); // Neprognozējami rezultāti
multiplyRandomNumber(5); // Neprognozējami rezultāti
The multiplyRandomNumber Iepriekš minētā funkcija sniegs atšķirīgus rezultātus katru reizi, kad to izsaucat, padarot to netīru. Šīs funkcijas rezultāti ir neparedzami, tāpēc uz to balstīto komponentu testēšana ir sarežģīta.
Nav blakusefektu
Tīra funkcija nedrīkst radīt nekādas blakusparādības. Blakusparādība attiecas uz jebkādām stāvokļa vai uzvedības izmaiņām ārpus funkcijas darbības jomas, piemēram, globālo mainīgo modificēšanu, konsoles izvadi, tīkla pieprasījumus vai DOM manipulācijas.
Ja tīrai funkcijai ir blakusefekts, tā vairs nav tīra, jo tā ietekmē ārējo stāvokli un pārkāpj principu, ka nav novērojamas blakusparādības. Tāpēc tīrās funkcijas novērš blakusparādības, lai nodrošinātu, ka tās nemaina programmas stāvokli.
Piemēram, apsveriet tālāk sniegto piemēru:
ļaut skaits = 0;
funkcijupieaugums() {
skaitīt++;
konsole.log (skaits);
}
pieaugums (); // Baļķi 1
pieaugums (); // Baļķi 2
pieaugums (); // Baļķi 3
The pieaugums funkcijai šajā piemērā ir blakusefekts, mainot skaitīt mainīgais ārpus tā darbības jomas. Tas arī reģistrējas konsolē.
Šī funkcija nav tīra, jo tai ir blakus efekts, kas var apgrūtināt tās izvades prognozēšanu un testēšanu atsevišķi. Lai padarītu to tīru, varat to modificēt, lai iekļautu skaitīt mainīgo kā argumentu un atgriež palielināto vērtību, nemainot nekādu ārējo stāvokli.
Tā kā:
funkcijupieaugums(skaitīt) {
atgriezties skaitīt + 1;
}
pieaugums (1); // atgriež 2
pieaugums (1); // atgriež 2
pieaugums (1); // atgriež 2
Versija par pieaugums Funkcijai iepriekš minētajā piemērā nav blakus efektu, jo tā nemaina nevienu ārēju mainīgo vai nereģistrē vērtību. Turklāt neatkarīgi no tā, cik reižu jūs to izsaucat, tas atgriež to pašu vērtību vienai un tai pašai ievadei. Tāpēc tā ir tīra funkcija.
Citas īpašības
Papildus tam, ka atgriešanās vērtība ir nemainīga un nerada nekādas blakusparādības, jums jāievēro šādi noteikumi, kad esat izveidojot JavaScript funkciju ka vēlaties būt tīrs:
- Jūsu funkcija nedrīkst mainīt nevienu tās argumentu. Tā vietā, ja kādai darbībai nepieciešama mutācija, izveidojiet argumenta kopiju un mutējiet kopiju.
- Jūsu funkcijai vienmēr ir jābūt atgriešanas vērtībai. Ja jūsu funkcijai nav atgriešanas vērtības vai nekādu blakusparādību, tā neko nevar darīt!
- Jūsu funkcija nedrīkst būt atkarīga no kāda ārēja stāvokļa.
Pure Functions priekšrocības
Tīrām funkcijām ir noteiktas priekšrocības salīdzinājumā ar netīrajām funkcijām, no kurām dažas ir šādas.
Pārbaudāmība
Tīras funkcijas ir viegli pārbaudīt, jo to ievades/izvades darbība ir labi definēta. Arī tīrās funkcijas nav atkarīgas no ārējā stāvokļa vai blakusparādībām. Tāpēc varat tos pārbaudīt atsevišķi, neuztraucoties par atkarībām vai mijiedarbību ar citām programmas daļām.
Turpretim tādu netīro funkciju pārbaude, kuras ir atkarīgas no ārējā stāvokļa vai rada blakusparādības, var būt sarežģītāka, jo to darbība var būt atkarīga no programmas stāvokļa vai citiem ārējiem faktoriem. Tas var apgrūtināt visaptverošu testa gadījumu izveidi un nodrošināt, ka funkcija darbojas pareizi visos scenārijos.
Memoizācija
Tā kā tīras funkcijas vienmēr rada vienu un to pašu izvadi vienai un tai pašai ievadei un nerada blakusparādības, varat tās viegli iegaumēt.
Paļaujoties uz šīm īpašībām un izmantojot iegaumēšanu, varat saglabāt kešatmiņā tīras funkcijas izsaukuma rezultātu konkrētai ievadei. Pēc tam jūsu funkcija var atgriezt kešatmiņā saglabāto rezultātu nākamreiz, kad tā tiks izsaukta ar to pašu ievadi.
Tīro funkciju iegaumēšana var uzlabot programmas veiktspēju, īpaši dārgiem aprēķiniem, kas atkārtoti izmanto vienu un to pašu ievadi, neuztraucoties par traucējumiem programmas stāvoklī.
Turpretim netīrās funkcijas vienai un tai pašai ievadei var radīt dažādus rezultātus atkarībā no programmas stāvokļa vai ārējiem faktoriem. Tas apgrūtina to iegaumēšanu, jo kešatmiņā saglabātais rezultāts var vairs nebūt derīgs, ja starp izsaukumiem mainās funkcijas atkarības vai ārējais stāvoklis.
Vienlaicīgums
Tā kā tīrās funkcijas nemaina nekādu ārējo stāvokli vai nerada nekādas blakusparādības, tās ir drošas. Varat tos palaist vienlaikus, neuztraucoties par sacensību apstākļiem vai sinhronizācijas problēmām.
Turpretim netīrās funkcijas var būt sarežģīti izpildīt vienlaikus, jo tās var traucēt viena otru vai radīt neparedzētu uzvedību, ja tās tiek izpildītas paralēli. Piemēram, ja divi pavedieni piekļūst vienam un tam pašam globālajam mainīgajam un to modificē, tie var pārrakstīt viens otra izmaiņas vai radīt nekonsekventus rezultātus.
Pure Functions vs. Netīrās funkcijas
Varat rakstīt programmas, izmantojot tīru un netīru funkciju kombināciju, jo katram veidam ir savs lietojums.
Tīras funkcijas ir viegli optimizēt, testēt un paralēli veikt, padarot tās piemērotas tādiem lietošanas gadījumiem kā funkcionāla programmēšana, kešatmiņa, testēšana, paralēlā programmēšana un datu apstrādes uzdevumi.
Tomēr netīrās funkcijas rada problēmas testēšanā un vienlaicībā, taču tās ir noderīgas, strādājot ar mainīgām datu struktūrām vai mijiedarbojoties ar ārējām sistēmām un resursiem.