for vs while petlja

for vs while petlja

offline
  • Pridružio: 16 Jan 2010
  • Poruke: 23

Guglao sam, citao po stackoverflow-u ali ... Neki kazu for kada se zna koliko ce se puta telo petlje izvrsiti, neki kazu stvar izbora. Da li je zaista stvar izbora programera ili... ? Pa mora da ima nesto Smile Ne verujem da je konstruktor napravio tri "razlicite" petlje tek onako. Molim Vas ako se petlje zaista razlikuju u funkcionalnom ,a ne samo u sintaksnom smislu da mi pojasni.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milos Stojanovic
  • Programer u pokusaju
  • Pridružio: 31 Dec 2015
  • Poruke: 897
  • Gde živiš: Srbija / Zajecar

Moj primer. While petlju koristim kada znam uslov, a ne znam koliko puta ce se izvrisiti. For petlju koristim kada znam oba.



offline
  • Pridružio: 16 Jan 2010
  • Poruke: 23

Ok. Ali meni samo treba neki primer/kod da ja ukopcam kad se koristi jedno a kad drugo.

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4514

I for može da se koristi kao while petlja, samo izostaviš uslove Smile



U suštini nema nekog pravila. while se koristi da se izvršava određeni deo koda sve dok je zadovoljen neki uslov dok se for obično koristi za ograničen broj iteracija, tipa za prolazak kroz neki niz ili elemente objekta. Ukoliko radiš sa nizovima možeš koristiti forEach() funkciju što sprečava da pristupiš nealociranom indeksu niza.
var niz = [1, 2, 3, 4, 5]; niz.forEach( function (e) {   console.log(e); }); // 1 // 2 // 3 // 4 // 5
A imaš i for .. in za prolazak kroz objekat.

var objekat = {   'ime': 'Pera',   'prezime': 'Perić' }; for (k in objekat) {   if (objekat.hasOwnProperty(k)) {     console.log(k + ': ' + objekat[k]);   } } // ime: Pera // prezime: Perić
A imaš i map() funkciju koja je odlična kada recimo želiš da na brz način izmeniš elemente nekog niza.

var niz = [1, 3, 5, 7]; niz.map( function (x) {   return x * x; }); console.log(niz); // 1, 9, 25, 49

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14468
  • Gde živiš: Niš

Napisano: 29 Jul 2018 19:48

Generalno pravilo ne postoji, jer je u svakom slučaju za jedan problem moguće koristiti i jednu i drugu. Ali da, naišao si na dobar zaključak. Kada postoji potreba za brojačem u petlji, for petlja je ono što je jednostavnije koristiti. Jednostavnije u smislu zapisa i čitljivosti koda, a takvi razlozi nikako nisu 'tek onako'. Wink

Dopuna: 29 Jul 2018 19:50

E.L.I.T.E. ::I for može da se koristi kao while petlja, samo izostaviš uslove Smile

Ovo je primer za while(true), a osim ako nema nekog pooosebnog razloga... Smile

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4514

vasa.93 ::Ovo je primer za while(true), a osim ako nema nekog pooosebnog razloga... Smile
Da, mrzelo me je da smišljam nešto specijalno pa sam ostavio da samo ispisuje tekst. Viđao sam u C kodnim bazama da se koristi i da se prekida pri određenom uslovu sa break.

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Evo razloga za izbor:

for( var i = 0; i < 10; i++) {     //tralala }

Koristi se za petlju iz razloga što mogu znati BROJ ITERACIJA koje moram uraditi i imam INCREMENTING varijablu koja može biti veoma korisna.

Sintaksa tokom ciklusa:

while(!done) {     //tralala }

Ja bih koristio ovu petlju kada NISAM SIGURAN koliko ITERACIJA mogu da izvršim. Primeri: Čekanje da korisnik unese tačne ulazne vrednosti i drži petlju dok se ne unese odgovarajuća vrednost. Ovo se inače retko koristi jer imamo generalno u JS sve moguće evente i prosto je nepotrebno opterećivati memoriju ili procesor sa ovim.

Do-While:

do {     //tralala } while(!done);

Ova petlja je skoro ista kao i predhodna, ali bih koristio ovo kada mi je potrebno nešto uraditi BAR JEDNOM pre nego što potvrdim šta god da je to učinilo da želim taj kod vrtiti ponovo. Primer: pitajte korisnika o inputu po prvi put i potvrdite ga. Ako je pogrešan unos dat, potom pozovite i ponovo tražite unos.

U praksi ti generalno treba najviše u 98% for() petlja i forEach(). Sve ostalo je već zastarelo ali korisno znati i upotrebljivo je lako.

Danas je JavaScript pun event-a i sve se radi preko toga. Nekada nije bilo ni 50% približan broj eventa i sve se radilo kao sa BASH skriptama. Čak se umesto while() pronašao dobrim setTimeout() koji se koristi kao loop sa određenim kašnjenjem.

U svakom slučaju, od tebe zavisi šta želiš koristiti i koliko želiš da optimizuješ kod.

U javaskriptu je svaka mikrooptimizacija i optimizacija poželjna a posebno pravilno napisani algoritmi i loopovi koji neće opteretiti CPU i pšružiti rad na svim platformama i browser-ima

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3608
  • Gde živiš: 127.0.0.1

for( int i = 0; i > 10; i++) {     //tralala }

Ovo ce da se izvrsi okruglo NULA puta, i to iz dva razloga: "Uncaught SyntaxError: Unexpected identifier" (treba "var" umesto "int") i drugo, petlja pocinje od 0, dokle god je i vece od 10, sto se nece desiti nikad.

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Rastafarii ::for( int i = 0; i > 10; i++) {     //tralala }

Ovo ce da se izvrsi okruglo NULA puta, i to iz dva razloga: "Uncaught SyntaxError: Unexpected identifier" (treba "var" umesto "int") i drugo, petlja pocinje od 0, dokle god je i vece od 10, sto se nece desiti nikad.


ooo Bože. Ispravio sam. Malo sam nabrzaka sve pisao i totalno pobrljavio. Hvala ti.

Ko je trenutno na forumu
 

Ukupno su 601 korisnika na forumu :: 40 registrovanih, 4 sakrivenih i 557 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3028 - dana 22 Nov 2019 07:47

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: _commandos_, Abdee, amonsrb, Apok, aramis s, boki199777, BSD2, cicus91, darkstar101, doom83, dovla p, filiplukac1337, Gama, GreenMan, GrM, Hektor2, Lazarus, Levi, madza, Marko Marković, marsovac 2, mercedesamg, Milan A. Nikolic, milekNS, Ratnik84, repac, Sasa Pavlovic, scimitar19, Sibin2, Sirius, Skywhaler, Srna2, uhogrlonos, Viceroy2, vlvl, vobo, Voja1978, VP3987, xandar, zoranis