Spread & Rest operator

Spread operator

Sa novim ES2015 standardom je došao novi operator „…“ koji može da razdvoji niz u listu i obrnuto da grupiše listu u niz. U zavisnosti koju funkciju obavlja ovaj parametar ima naziv „spread“ ili „rest“. Ukoliko se operator nalazi ispred iteratibilnog objekta i „širi“ iterator (npr.niz) u pojedinačne vrednosti praveći listu, onda se naziva „spread“.

Transformacija niza u listu argumenata

Ovaj operator je zamena za često korišćen problem kada je potrebno niz prebaciti u listu argumenata. A najbolji primer je „širenje“ niza u listu argumenata funkcije. Ovaj operator se koristi pri pozivanju funkcije:

Deklaracije niza koji sadrži drugi niz

Koristi se u okviru deklaracije niza koji sadrži drugi niz:

Kloniranje objekta

Sa novim standardom je dozvoljeno korišećenje spread operatora u okviru object literala. Ova pogodnost nam omogućava da korišćenjem spread operatora jednostavno kloniramo objekte, bez korišćenja metode Object.assign():

Spajanje dva objekta

Korišećenjem spread operatora je olakšano spajanje dva objekta bez dupliranja svojstava:

Rest operator

Neograničeni broj argumenata kao niz

Rest sintaksa nam dozvoljava da predstavimo neograničeni broj argumenata kao niz. Ovaj operator se koristi pri definisanju funkcije tako što grupiše preostale argumente u niz:

Sakupljen niz može po potrebi da se destruktuira na pojedinačne vrednosti.

Transformacija liste u niz

Ovaj operator zamenjuje prekomplikovano rešenje koje se koristilo za prebacivanje liste u niz :

Novi način sa rest operatorom:

BONUS: Asocijativnost spread/rest operatora

Svaki JavaScript operator ima svoju „važnost“ koja je direktno povezana za asocijativnost i način na koji se odredjuje koja operacija ima prednost u odsustvu zagrada. Sread/Rest operator spada u „slabije“ operatore (tj. jedino je slabiji , „zarez“ operator). Tabelu značaja operatora pogledajte u članku „JavaScript opertator“.

Primer

U JavaScript svetu možemo da naletimo na sledeći izraz:

Bitan deo celog ovog izraza je ustvari ovaj teško razumljivo deo:

es6

Da bi se razumeo izraz potrebno je da znamo koji operator ima veći značaj tj. prednost pri izvršavanju izraza. Sledeća lista prikazuje operatore iz ovog izraza prema „značaju“:

  1. !! (operator negacije)
  2. … ? … : … (ternarni operator)
  3. … (spread operator)

Predhodna lista nam odredjuje tok izvrašavanja izraza: prvo se sa duplom negacijom „data“ promenjiva konvertuje u logičku vrednost (više o ovome pročitajte u članku „JS snippets (tips & tricks)“). Ukoliko dobijemo TRUE logičku vrednost onda na scenu stupa ternarni operator koji uzima „data“ objekat nakon čega ga „raširi“ sa spread operatorom, za FALSE vrednost trenarrni operator vraća objekt literal i nje ga raširi sa spread operatorom.