JavaScript višestruko grananje (switch)

Višestruko grananje nam je potrebno kada postoji više mogućnosti. Ako se svaka mogućnost ostvaruje u slučaju da je zadovoljen neki uslov jednakosti, možemo koristiti komandu switch.

Najpre se zadaje komanda switch, posle koje se obavezno navodi izraz unutar zagrade. Ovo je izraz čiju ćemo vrednost proveravati. Onda se navodi blok (vitičaste zagrade). Unutar bloka se navode case izrazi za koje se proverava da li im je vrednost jednaka switch izrazu.

Znači, navede se reč case, zatim sam izraz i dvotačka. Posle toga se navode naredbe koje se izvršavaju u slučaju da je vrednost switch izraza jednaka vrednosti tog case izraza. Ove naredbe ne moraju biti u posebnom bloku (nisu potrebne dodatne vitičaste zagrade).

Ako posle tih naredbi dolazi novi case, poslednja naredba mora biti naredba break. Ova naredba će naterati program da iskoči iz switch strukture. Ako je propustimo, jednostavno će nastaviti da se izvršavaju naredbe za sledeći case, što najčešće nije ono što smo želeli da se desi.

Za iste naredbe moguće je navesti i više case izraza.

Ako je potrebno da se određene naredbe izvrše u slučaju da vrednost switch izraza nije jednaka ni jednom od navedenih case izraza, na kraju se navodi reč default (sa obaveznom dvotačkom) i naredbe koje se izvršavaju. Za poslednju grupu naredbi nije potrebno navoditi komandu break.

switch ([izraz]) { case [izraz]: [naredbe] break; case [izraz]: case [izraz]: ... [naredbe] break; default: ... [naredbe] }

Primeri za switch grananje


  switch (ocena) {
    case 5:
      console.log("Loše");
    break;
    case 6:
    case 7:
      console.log("Dobro");
    break;
    case 8:
    case 9:
      console.log("Solidno");
    break;
    case 10:
      console.log("Odlično");
    break;
  }
		

U ovom primeru se proverava da li je vrednost promenljive ocena jednaka 5, i ako jeste, u konzoli se ispisuje tekst "Loše". Ako je vrednost ocene jednaka 6 ili 7, ispisuje se "Dobro", ako je jednaka 8 ili 9 ispisuje se "Solidno", i konačno, ako je ocena jednaka 10 ispisuje se "Odlično". Primetićete da je ovo veoma slično primeru koji smo imali u tekstu o else if konstrukciji.

Iako nismo morali, posle poslednjeg case-a smo ipak ubacili i break. Ovo je dobra praksa, jer ćemo možda kasnije odlučiti da dodajemo još case izraza, a lako nam se može desiti da zaboravimo da ubacimo naredbu break.

Pogledajmo još jedan primer:


  switch (mesec) {
    case 1: case 3: case 5: case 7: case 8: case 10: case 12:
      brojDana = 31;
      daniTxt = "tridesetjedan";
    break;
    case 4:
    case 6:
    case 9:
    case 11:
      brojDana = 30;
      daniTxt = "trideset";
    break;
    default:
      brojDana = 28;
      daniTxt = "dvadesetosam";
  }
		

Ovo je primer kako bismo mogli da upotrebimo switch naredbu za određivanje broja dana u mesecu (prestupnim godinama ćemo se baviti neki drugi put). Znači, zavisno od broja meseca, promenljiva brojDana dobija vrednost broja dana u tom mesecu, a promenljiva daniTxt odgovarajuću tekstualnu vrednost.

Case izrazi mogu da se navedu i u istom redu.

Pogledajmo kako bi izgledala if naredba kojom bismo postigli to isto.


  if ( (mesec==1) || (mesec==3) || (mesec==5) || (mesec==7) || (mesec==8) || (mesec==10) || (mesec==12) ) {
    brojDana = 31;
    daniTxt = "tridesetjedan";
  }
  else if ( (mesec==4) || (mesec==6) || (mesec==9) || (mesec==11) ) {
    brojDana = 30;
    daniTxt = "trideset";
  }
  else {
    brojDana = 28;
    daniTxt = "dvadesetosam";
  }
		

Sami odlučite šta vam se više dopada.

Primer za C++ i Java programere

Kada smo napisali da se u case klauzuli navode izrazi, a ne konstante, nismo pogrešili. Za razliku od Pascala, Jave i C++ jezika, JavaScript ne zahteva da se pod case-om nađu samo konstante. Pogledajte šta možemo da uradimo:


  var x = 5;
  var y = 10;

  switch (x + 7.1) {
    case y:
      console.log("može i promenljiva");
    break;
    case y + 2.1:
      console.log("može i decimalni izraz");
  	break;
  	case polovina(y):
      console.log("može i funkcija");
  	break;
  	default:
      console.log("nije se poklopilo :)");
  }
		

Kao što vidimo, u case-u su dozvoljene i promenljive, i izrazi koji čak nisu ni celobrojni, pa čak i pozivi funkcija. Nećemo ulaziti u to koliko je ovo preporučljiva praksa.

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). Detaljnije o tome možete pročitati u tekstu o našoj politici privatnosti.