Standardne petlje

petlja

Često se javlja potreba da se unutar programa neke linije koda izvršavaju više puta. Ovaj način izvršavanja se ostvaraju pomoću odgovarajućih upravljačkih struktura. Petlje i iteracije su osnovni gradivni element svakog programa. Standardne petlje se javljaju manje više u istom obliku u skoro svim programskim jezicima. Najkorišćenija je “for petlja”. Posebnu pažnju treba obratiti na while petlje jer postoji mogućnost da petlja usled lošeg izbora uslova postane beskonačna.

“while” petlja

While izraz se izvršava sve dok je uslov TRUE, a ukoliko nije onda se izlazi iz petlje. Ovaj tip petlje se najčešće koristi kada se ne zna tačan broj izvšenja petlje. U slučaju da uslov na samom početku nije ispunjen, petlja se ne izvršava ni jednom. Pre ulaska u petlju vrši se inicijalizacija promenljivih koje će biti korišćene bilo u uslovu, bilo u telu petlje. U telu petlje se nalazu kod koji formira uslov za ostanak u petlji.

Ovaj tip je nazvan “pre-test loop” jer se uslov izvršava pre bloka sa izrazom.

Izraz “n++” se naziva “updater”. Najčešće se pre petlje definišu početne vrednosti za uslov. Obratiti pažnju na mogućnost stvaranja “beskonačne petlje” ukoliko nema updater-a.

“do-while” petlja

Izraz u okviru do…while petlje se izvršava sve dok uslov ne bude FALSE. Razlika izmedju “do…while” i “while” petlje je ta da se ovde izraz bar jednom izvrši, dok kod “while” postoji mogućnost da se izraz nikad ne izvrši ako je uslov u startu FALSE.

Ovaj tip petlje se najčešće koristi kada izraz u telu petlje generiše vrednost koja će se koristiti u uslovu.

“for” petlja

Ovo je najčešće korišćena petlja. Za razliku od “while” i “do…while” petlji gde su ključne tačke petlje [početna vrednost], [uslov] i [izraz za povećavanje] na različitim mestima, ovde ih struktura zvana “iteration statement” drži na okupu, u jednom redu, odvojene sa tačaka-zarezom.

Ovaj tip petlje se koristi ukoliko se na početku zna tačan broj izvršenja petlji.

Dodatne naredbe

break

Izraz break se koristi da se iskoči iz tela petlje. Nalazi se negde u telu petlje, obično iza nekog dodatnog uslova. Može se koristiti uz bilo koji pomenuti tip petlje.

BREAK u FOR petlji

Rezultat je:

continue

Sa naredbom continue se ne prekida izvršenje iteracija, već se preskače trenutna iteracija.

continue u FOR petlji

Rezultat je:

continue u WHILE petlji

Rezultat:

Loop labels

Loop labels je sintaksa koja omogućava obeležavanje petlji. Label (naziv petlje) se stavlja ispred svake petlje zajedno sa dvotačkom.

Obeležavanje petlji nam daje mogućnost da pri korišćenju break ili continue naredbi, možemo da izaberemo petlju na koju želimo da primenimo naredbe.

Iteracija kroz objekat

for-in

Ovo je specifična “for” petlja koja prolazi kroz sva svojstva nekog objekta kod kojih je deskriptor svojstva enumerable, setovan na TRUE. Ovaj način može da se primeni i na nizove ali ima ograničenja i puno neželjenih sporednih efekata, pa je preporuka da se iteraciju kroz nizove ipak koristi neki drugi način (npr. “for…of” petlja).

Rezultat je:

NAPOMENA:
for…in petlja “prolazi” čak i svojstva koja se nasledjuju kroz prototype objekat roditelja.

Ova petlja će vratiti svojstva objekta dragoljub (Dragoljub, javascript) ali i nasledjeno svojstvo od roditelja (programer). Ukoliko želimo ipak da vratimo samo “lična” svojstva objekta, moramo da filtriramo koristeći metodu hasOwnProperty, kao u sledećem primeru:

Ovaj kod vraća samo lična svojstva objekta “dragoljub“: Dragoljub i javascript.

NAPOMENA:
Treba naglasiti da kod ovog načina iteracije nije zagarantovan redosled članova iteracije.

Prebacivanje svojstava objekata u niz radi lakše itaracije

Sa ES2015 je došao jedan veliki set sjajnih metoda za razne iteracije kroz nizove, koji su jedan od glavnih razloga što bi od svojstava objekta napravili niz. Dodatni razlog je taj što postojeća “for..in” petlja prolazi kroz sva svojstva objekta, pa čak i kroz ona koja nasledjuje kroz lanac nasledjivanja.

Object.values

Kreira niz od svih vrednosti “enumerable” svojstva objekta (bez svojstva duž lanca nasledjivanja).

Primer

NAPOMENA:
Redosled članova je random isto kako kod for..in petlje!

Object.keys

Kreira niz od svih ključeva “enumerable” svojstva objekta (bez svojstva duž lanca nasledjivanja).

Primer

NAPOMENA:
Redosled članova je random isto kako kod for..in petlje!

Object.entries

Kreira niz od svih [key, value] parova “enumerable” svojstva objekta (bez svojstva duž lanca nasledjivanja).

Primer

NAPOMENA:
Redosled članova je random isto kako kod for..in petlje!

Iteracija nizova

for-of

Ovo je novi način iteracije koji je došao u paketu sa ES6 standardom. Iteracija sa “for…of” prolazi kroz vrednosti kolekcije. Koristi se za sve iteratibilne kolekcije (Array, Map, Set, String…), ali nije planiran za iteraciju kroz svojstva objekata.

gde je:

  • vrednostClana – predstavlja novu vrednost koja se dodeljuje pri svakoj iteraciji
  • kolekcija – naziv kolekcije kroz čija svojstva se vrše iteracije

Za razliku od for…in gde nije garantovan stalni redosled iteracije, kod ovog načina se iteracije vrše prema redosledu.

Rezultat:

Iteracija kroz “niz”

Iteracije kroz “string”

Iteracije kroz DOM

Iteracije kroz MAP

Iteracija kroz Set

Generators

NPOMENA:
Iako ovaj način iteracije nije planiran za iteraciju objekta, ipak postoji zabilazni način da se primeni i na objektima koristeći Object.keys():

forEach()

Ova metoda izvršava odredjenu funkciju (callback) koristeći svaki elemenat prosledjenog niza. Ova funkcija je manje fleksbilna od standardne “for petlje” jer nema uslovne izraze i ne postoji mogućnost da se prekine jednom započeti “loop” osim da izbaci izuzetak. Callback funkciji metoda prosledjuje tri parametra:

  • vrednost člana niza
  • indeks člana niza
  • niz (nad kojim se izvršava metoda)

Pored callback funkcije može (opciono) da se prosledi i argument thisArg, koji definiše na šta će da ukazuje rezervisana reč this u okviru callback funkcije. Sama funkcija ne vraća ništa automatski, stoga nije “chainable” (na nju se ne može na ulančati sledeća metoda). Čak i posle eksplicitnog korišćenja return izraza, neće vratiti ništa posle iteracije.

Primer

Isti rezultat može da se dobije koristeći druge atribute

Primer

Callback funkcija ne može da koristi u proračunu “prazne članove niza” (član niza sa indeksom kome nije prodružena vrednost). Stoga u narednom primeru ova metoda neće uzimati u obzir prazan element, pa će član niza sa indeksom 2 biti preskočen:

map()

Ovaj metod vraća novi niz, koji se dobija koristeći callback funkciju nad elementima izvornog niza obraćajući pažnju na redosled članova izvornog niza. Kao i kod funkcije forEach() callback funkcija ne koristi u proračunu “prazne članove niza” (član niza sa indeksom kome nije prodružena vrednost). Funkcija map() ne utiče na izvorni niz. Callback funkciji metoda prosledjuje tri parametra:

  • vrednost člana niza
  • indeks člana niza
  • niz (nad kojim se izvršava metoda)

Pored callback funkcije može (opciono) da se prosledi i argument thisArg, koji definiše na šta će da ukazuje rezervisana reč this u okviru callback funkcije.

Primer

Primer

NAPOMENA:
Obratiti pažnju na slučaj kada se za callback funkcije koriste funkcije koje zahtevaju jasno definisane parametere, a ne pomenuta tri parametra koja prosledjuje map() funkcija.
Najbolji primer je parseInt() funkcija koja za prvi parametar zahteva string a za drugi izbor numeričkog sistema.

Funkcija parseInt() vraća NaN kada za drugi parametar (koji potražuje tip numeričkog sistema, očekivani brojevi su: 2, 8, 10, 16…), od map() metode dobije indeks niza.

reduce()

Ovaj metod vraća samo jednu vrednost, tu vrednost dobija izvršavajući kod unutar callback fukcije, koristeći svaki član niza (sa leva na desno). Pored same callback funkcije može da se prosledi opcioni parametar početna vrednost akumulacije.

Callback funkciji se mogu proslediti četri parametra:

  • akumulirana vrednost (vrednost iz poslednje pozvane callback funkcije ili početna vrednost).
  • vrednost člana niza koji se obradjuje
  • indeks člana niza koji se obradjuje
  • niz (nad kojim se izvršava metoda)

Primer

sort()

Ova metoda sortira elemente niza. Elementi se konvertuju u sting pa se porede i sortiraju prema “Unicode code points”. Obratite pažnju na to da metoda sort() sortira vrednosti kao sting-ove prema “Unicode code points” (prvo poredeći prva slova). Prema tome 80 je manje od 9.

Prethodni problem može da se reši sa argumentom metode jer metoda sort() opciono može da prihvati kao argument i funkciju za poredjenje.

OBJAŠNJENJE: Funkcija za poredjenje može da vrati negativan broj, nulu ili pozitivan broj.
Primer:

Kada metoda sort() pozove funkciju za poredjenje za neka dva broja, ukoliko je rezultat negativan to znači da je drugi broj veći od prvog pa će sort() funkcija sortirati prvi broj kao manji. U slučaju pozitivnog rešenja biće obrnuto, dok za vrednost nula metoda zna da su jednaki.

Primer

filter()

Ova metoda takodje vraća novi niz, ali samo sa elementima koji su prošli test implementiran u izabranoj funkciji. Metoda ne menja izvorni niz. Callback funkciji metodaprosledijujetri parametra:

  • vrednost člana niza
  • indeks člana niza
  • niz (nad kojim se izvršava metoda)

Pored callback funkcije može (opciono) da se prosledi i argument thisArg, koji definiše na šta će da ukazuje rezervisana reč this u okviru callback funkcije.

Primer

Primer

Primer

every()

Ova metoda se koristi za testiranje niza, proverava da li svi članovi niza zadovoljavaju uslov (uslov u okviru callback funkcije) i vraća boolean vrednost. Metoda ne menja izvorni niz. Callback funkciji metodaprosledijujetri parametra:

  • vrednost člana niza
  • indeks člana niza
  • niz (nad kojim se izvršava metoda)

Pored callback funkcije može (opciono) da se prosledi i argument thisArg, koji definiše na šta će da ukazuje rezervisana reč this u okviru callback funkcije.

Primer

some()

Ova metoda se takodje koristi za testiranje niza, vraća true ukoliko bar jedan član niza zadovolji uslov (uslov u okviru callback funkcije), u suprotnom vraća false. Callback funkciji metoda prosledjuje tri parametra:

  • vrednost člana niza
  • indeks člana niza
  • niz (nad kojim se izvršava metoda)

Pored callback funkcije može (opciono) da se prosledi i argument thisArg, koji definiše na šta će da ukazuje rezervisana reč this u okviru callback funkcije.

Primer

find()

Ova metoda vraća prvi član niza koji zadovoljava uslov (uslov u okviru callback funkcije). Callback funkciji metoda prosledjuje tri parametra:

  • vrednost člana niza
  • indeks člana niza
  • niz (nad kojim se izvršava metoda)

Pored callback funkcije može (opciono) da se prosledi i argument thisArg, koji definiše na šta će da ukazuje rezervisana reč this u okviru callback funkcije.

Primer

Metoda findIndex() radi sličnu stvar, stim što umesto prvog elementa koji je zadovoljio uslov, vraća njegov index u nizu.

Podelite:

Ostavite komentar