Kirjoita turvallisempi ja puhtaampi koodi hyödyntämällä ”muuttumattomuuden” voimaa

Muuttamattomuus on yksi toiminnallisen ohjelmoinnin rakennuspalikoista. Sen avulla voit kirjoittaa turvallisemman ja puhtaamman koodin. Näytän sinulle, kuinka voit saavuttaa muuttumattomuuden joidenkin JavaScript-esimerkkien avulla.

Wikipedian mukaan (lähde):

Muuttamaton kohde (muuttumaton objekti) on objekti, jonka tilaa ei voida muuttaa sen luomisen jälkeen. Tämä on ristiriidassa muutettavan objektin (muutettavissa olevan objektin) kanssa, jota voidaan muokata sen luomisen jälkeen. Joissakin tapauksissa kohdetta pidetään muuttumattomana, vaikka jotkin sisäisesti käytetyt attribuutit muuttuvat, mutta objektin tila näyttää muuttumattomalta ulkoiselta kannalta.

Muuttamattomat taulukot

Taulukot ovat hyvä lähtökohta saada käsitys siitä, miten muuttumattomuus todella toimii. Katsotaanpa.

const arrayA = [1, 2, 3];arrayA.push(4); const arrayB = arrayA;arrayB.push(5); console.log(arrayA); // [1, 2, 3, 4, 5]console.log(arrayB); // [1, 2, 3, 4, 5]

Tässä esimerkissä käytetään arrayB on viittaus Arraya , joten push menetelmä lisää arvo 5 molempiin muuttujia. Koodimme mutatoi muut arvot epäsuorasti, mitä emme halua tehdä. Tämä rikkoo muuttumattomuuden periaatetta.

Voimme parantaa esimerkkimme muuttumattomaksi käyttämällä leikkaustoimintoa, ja koodin käyttäytyminen on erilainen.

const arrayA = [1, 2, 3];arrayA.push(4); const arrayB = arrayA.slice(0);arrayB.push(5); console.log(arrayA); // [1, 2, 3, 4]console.log(arrayB); // [1, 2, 3, 4, 5]

Juuri sitä haluamme. Koodi ei mutatoi muita arvoja.

Muista: Kun lisäät taulukon arvoa push-toiminnolla, mutatoit taulukon. Haluat välttää muuttujien mutaatiota, koska se voi aiheuttaa sivuvaikutuksia koodissasi. Viipalefunktio palauttaa kopion taulukosta.

Toiminnot

Nyt osaat välttää muiden arvojen mutaation. Kuinka kirjoitat funktiot "puhtaiksi"? Pure on toinen sana kutsua funktioksi, jolla ei ole sivuvaikutuksia eikä se muuta tilaa.

Tarkastellaan funktiota, joka hyödyntää samaa periaatetta taulukoiden esimerkissä. Ensin luomme funktion, joka mutatoi toisen arvon, ja sitten parannamme funktion olevan "puhdas".

const add = (arrayInput, value) => { arrayInput.push(value); return arrayInput;};
const array = [1, 2, 3]; console.log(add(array, 4)); // [1, 2, 3, 4]console.log(add(array, 5)); // [1, 2, 3, 4, 5]

Joten jälleen, mutaatiomme panoksemme, joka luo arvaamattoman toiminnon. Toiminnallisessa ohjelmointimaailmassa toimintojen ympärillä on kultainen sääntö: funktion, jolla on sama tulo, tulisi aina palauttaa sama tulos .

Yllä oleva toiminto rikkoo kultaista sääntöä. Joka kerta kun lisäosa funktiota kutsutaan, se mutates jono muuttuja ja tulos on erilainen.

Katsotaanpa, miten voimme muuttaa add- funktion toteutusta niin, että se on muuttumaton.

const add = (arrayInput, value) => { const copiedArray = arrayInput.slice(0); copiedArray.push(value); return copiedArray;}; const array = [1, 2, 3];
const resultA = add(array, 4);console.log(resultA); // [1, 2, 3, 4]
const resultB = add(array, 5);console.log(resultB); // [1, 2, 3, 5]

Nyt voimme soittaa funktiollemme useita kertoja ja odottaa, että tulos on sama tulon perusteella. Tämä johtuu siitä, että emme enää mutatoi taulukon muuttujaa. Voimme kutsua tätä toimintoa "puhtaaksi toiminnoksi".

Huomautus: Voit myös käyttää concat sijasta siivu ja push .

Joten: arrayInput.concat (arvo);

Voimme käyttää ES6: ssa saatavaa levityssyntaksia tämän toiminnon lyhentämiseen.

const add = (arrayInput, value) => […arrayInput, value];

Samanaikaisuus

NodeJS-sovelluksissa käytetään samanaikaisuutta. Rinnakkaisoperaatio tarkoittaa, että kaksi laskutoimitusta voivat molemmat edistyä toisesta riippumatta. Jos ketjuja on kaksi, toisen laskennan ei tarvitse odottaa ensimmäisen valmistumista, jotta se voi edetä.

NodeJS mahdollistaa samanaikaisuuden tapahtumasilmukan kanssa. Tapahtumasilmukka ottaa toistuvasti tapahtuman ja ampuu kaikki tapahtumankäsittelijät, jotka kuuntelevat tapahtumaa yksi kerrallaan. Tämän mallin avulla NodeJS-sovellus pystyy käsittelemään valtavan määrän pyyntöjä. Jos haluat lisätietoja, lue tämä artikkeli tapahtumasilmukasta.

Mitä tekemistä muuttumattomuudella on samanaikaisuuden kanssa? Koska useat operaatiot voivat muuttaa funktion laajuuden ulkopuolista arvoa samanaikaisesti, tämä luo epäluotettavaa tulosta ja aiheuttaa odottamattomia tuloksia. Ole tietoinen toiminnosta, joka mutatoi muuttujat sen soveltamisalan ulkopuolella, koska se voi olla todella vaarallista.

Seuraavat vaiheet

Muuttamattomuus on tärkeä käsite, joka on ymmärrettävä matkallasi oppimaan toiminnallinen ohjelmointi. Haluat ehkä katsoa ImmutableJS: n, jonka kehittäjät ovat kirjoittaneet Facebookissa. Kirjasto tarjoaa tiettyjä muuttumattomia tietorakenteita, kuten Map , Set ja List .

Immutable.js, pysyvät tietorakenteet ja rakenteellinen jakaminen

Miksi käyttää Immutable.js: ää normaalin JavaScript-objektin sijaan? medium.com Korkeamman tilauksen toiminnot: Suodattimen, kartan ja pienennyksen käyttäminen ylläpitävämmäksi koodiksi

Korkeamman tilauksen toiminnot voivat auttaa sinua tehostamaan JavaScript-peliäsi tekemällä koodistasi deklaratiivisemman. Se on… medium.freecodecamp.org

Klikkaa ? alla, joten muut ihmiset näkevät tämän artikkelin täällä Mediumissa. Kiitos lukemisesta.