WEBnSTUDY.com
JavaScript

JavaScript grananje (if-else)

Grananje je osnovna kontrolna struktura. Ideja je da se u programu postavi pitanje vezano za neko trenutno stanje, a onda zavisno od odgovora, izvršava se jedan ili drugi deo programa. Na taj način se vrši odlučivanje o daljem toku programa.

Zašto dolazi do ovakvih situacija pa nam je grananje potrebno? Jednostavno, zato što naš program treba da bude "spreman" za razne situacije. To se najčešće dešava jer ne možemo da znamo kakve ulazne vrednosti (aktivnosti) će zadati korisnik, već samo da predvidimo razne mogućnosti.

Unutar naredbe if zadaje se izraz (unutar zagrade) na osnovu koga se određuje dalji tok programa. Uobičajeno je da izraz kao rezultat vraća logičku vrednost - tačno ili netačno (true ili false). Ako je rezultat izraza "tačno", izvršava se naredba koja sledi ključnu reč if. U suprotnom slučaju, izvršava se naredba koja sledi posle else.

Ako ne postoji ništa što bi se izvršilo u "suprotnom" slučaju, else deo je moguće izostaviti.

if ([izraz]) [naredba]; else [naredba];

Konstrukcija if može obuhvatiti i više naredbi, bilo u if, bilo u else bloku. Kao što znamo, naredbe se unutar bloka smeštaju unutar vitičastih zagrada.

if ([izraz]) { [naredbe] } else { [naredbe] }

Kada se naredbe grananja izvrše, program se normalno nastavlja.

Primeri za if-else grananje


  if (x>5) console.log("Vrednost je veca od 5.");
		

U ovom primeru se proverava da li je vrednost promenljive x veća od 5, i ako jeste, u konzoli se ispisuje tekst. U suprotnom (ako je x manji ili jednak 5), ne dešava se ništa, program nastavlja normalno sa izvršavanjem.


  if (x>5) 
    console.log("Vrednost je veca od 5."); 
  else 
    console.log("Vrednost nije veca od 5.");
		

U ovom primeru se vrši ista provera, s tim što postoji i naredba koja se izvršava i u slučaju da uslov nije zadovoljen.


  if ( (i>=0) && (i<=9) ) {
    x += i;
    y -= i;
  }
  else { 
    x = i*2;
    y = i*4;
  }
		

Ovde se proverava kompleksan uslov, a zavisno od rezultata izvršava se prvi ili drugi blok naredbi.

Šta sa else-om

Evo jedne situacije kada možemo da napravimo ozbiljnu grešku ako ne pazimo. Stvar je u tome što unutar if i unutar else odeljka možemo smestiti još unutrašnjih if-ova.

Kada imamo if unutar if-a, i jedan else, možemo da dođemo u nedoumicu - na koji if će se odnositi taj else.


  var x = 5;
  var y = 10;
  var z = 0;
  if (x>y) 
    if (x>20)
      z = y;
    else
      z = x;
  console.log ("Rezultat je " + z);
		

Ne zaboravite - else se odnosi na poslednji if. Takođe, ona jedna naredba unutar if-a, je cela unutrašnja if-else struktura. Dakle, u promenljivoj z će se na kraju i dalje nalaziti vrednost 0!

Ok, pazite šta se dešava kada uvedemo blok, odnosno vitičaste zagrade.


  var x = 5;
  var y = 10;
  var z = 0;
  if (x>y) {
    if (x>20)
      z = y;
  }
  else
    z = x;
  console.log ("Rezultat je " + z);
		

Pogledajte šta smo uradili. Unutrašnji if smo ubacili u blok, tako da se samo taj deo izvršava ako je prvi uslov zadovoljen. Ako uslov nije zadovoljne, jasno je naznačeno da else pripada spoljnom, a ne uturašnjem if-u. U ovom slučaju, z će imati vrednost 5.

Naš savet je da uvek koristite vitičaste zagrade i za if i za else deo, šak i kada imate samo po jednu naredbu u bloku.

Prvi slučaj bi onda bio:


  var x = 5;
  var y = 10;
  var z = 0;
  if (x>y) {
    if (x>20) {
      z = y;
    }
    else {
      z = x;
    }
  }
  console.log ("Rezultat je " + z);
		

Vežba

Koja vrednost bi se našle u promenljivoj z kao rezultat izvršavanja sledećeg programa?


  x = 5;
  y = 10;
  if (x>y) 
    x += 2;
    y++;
  z = x + y;
		

Ako ste mislili da je rezultat 15, pogrešili ste. Kada neam vitičastih zagrada, pod naredbom if se nalazi samo jedna naredba. To znači da se povećavanje y za 1, uvek izvršava.

Svi elementi sajta Web'n'Study, osim onih za koje je navedeno da su u javnom vlasništvu, vlasništvo su autora i ne smeju se koristiti, u celosti ili delimično bez pismenog odobrenja autora. To uključuje tekstove, slike, ilustracije, animacije, prateći grafički materijal i programski kod.
Ovaj sajt koristi tehnologiju kolačića (cookies) radi vođenja interne statistike u cilju unapređenja korisničkog iskustva. Tako prikupljeni podaci su anonimni i nedostupni trećim licima. Vaša privatnost nije ugrožena ni na koji način.