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 nizove 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:

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).

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

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:
“for..in” petlja prolazi kroz sva svojstva objekta, pa čak i kroz ona koja nasledjuje kroz lanac nasledjivanja, stoga ako nas interesuj samo “lična” svojstva objekta postoji mogućnost transformacije objekta u niz. Za to se koristi jedno od sledećih metoda: Object.values(obj), Object.keys(obj) ili Object.entries(obj). Više o ovim metodama pročitajte u članku “Object() & Object.prototype”

Iteracija kroz iterable for..of

Ovo je novi način iteracije koji je došao u paketu sa ES6 standardom. Iteracija sa “for…of” prolazi kroz vrednosti iterabilne 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

Iteracija kroz generatore

Iteracija kroz objekat
NAPOMENA:
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():

Pogledajte slične članke...

Podelite:

Ostavite komentar