Switches - switch & case statements

Započeo Vasic, Mart 12, 2022, 13:56:34 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Switches - switch & case statements


Šta je switch?

Ova naredba se još zove i naredbom višestrukog grananja. Njome proveravamo da li je neki izraz jednak nekoj od više konstantnih celobrojnih vrednosti, i u zavisnosti od toga, izvršavaju se određene akcije. Ovom naredbom možemo da zamenimo višestruko pojavljivanje naredbe if.

"switch" je u osnovi structured if/else if/else sistem (slično kako je "for" petlja zapravo structured "while" petlja - TUTORIJAL ZA PETLJE). Najlakši način da to objasnim je na primeru:

[pawn]new a = 5;
switch (a) {
   case 1: {
      // Neće biti pozvan
   }
   case 2: {
      // Neće biti pozvan
   }
   case 5: {
      // Biće pozvan
   }
   default: {
      // Neće biti pozvan
   }
}[/pawn]

Ovaj kod iznad će odraditi isto što i ovaj ispod:

[pawn]new a = 5;
if (a == 1) {
   // Neće biti pozvan
}
else if (a == 2) {
   // Neće biti pozvan
}
else if (a == 5) {
   // Biće pozvan
}
else {
   // Neće biti pozvan
}[/pawn]

Ali kako god, jasnije je videti razliku šta se dešava između ova dva koda. (Ispod još jasnije objašnjenje)
Ovde možemo primetiti kako if i switch zapravo rade:

[pawn]switch (NekaFunkcija())
{
   case 1: {}
   case 2: {}
   case 3: {}
}[/pawn]

To će pozvati NekaFunkcija() samo JEDNOM i uporediti njen rezultat 3 puta.

[pawn]if (NekaFunkcija() == 1) {}
else if (NekaFunkcija() == 2) {}
else if (NekaFunkcija() == 3) {}[/pawn]

Dok će ovo pozvati NekaFunkcija() čak TRI puta, što je veoma neefikasno.
Za vas koji znate C jezik, "switch" u PAWN jeziku je malo drugačiji, pojedinačni uslovi NISU propadajući i vezani su zagradama, tako da nema potrebe za naredbom break.




"case" - Case statements (delovi "case X:" naredbe "switch") mogu imati i druge opcije osim jednog broja. Možete da uporedite vrednost sa listom brojeva ili čak sa opsegom vrednosti:

[pawn]case 1, 2, 3, 4:[/pawn]

Ovaj slučaj će se pokrenuti ako je simbol koji se testira 1, 2, 3 ili 4, to je isto kao i:

[pawn]if (bla == 1 || bla == 2 || bla == 3 || bla == 4)[/pawn]

ali daleko sažetiji. Brojevi u listama ne moraju da budu uzastopni, u stvari, ako jesu, bolje je uraditi:

[pawn]case 1 .. 4:[/pawn]

Ovaj slučaj će raditi potpuno isto kao gore, ali proverom opsega umesto liste, to je isto kao i:

[pawn]if (bla >= 1 && bla <= 4)[/pawn]

[pawn]new a = 4;
switch (a)
{
   case 1 .. 3: { }
   case 5, 8, 11: { }
   case 4: { }
   default: { }
}
[/pawn]




"default" - Ovo je isto što i else u if naredbama, radi nešto ako sve ostale izjave case statementa ne uspeju.




Random primer:

[pawn]new rand = random(10);
switch(rand) {
   case 0..5: {
      SendClientMessage(playerid, -1, "Nasumična vrednost: od 0 do 5.");
   }
   case 6: {
      SendClientMessage(playerid, -1, "Nasumična vrednost je 6.");
   }
   case 7..9: {
      SendClientMessage(playerid, -1, "Nasumična vrednost: 7, 8 ili 9.");
   }
   default: {
      SendClientMessage(playerid, -1, "Nepoznata akcija.");
   }
}[/pawn]




Hvala Vam što ste odvojili vreme da pročitate tutorijal.
Nadam se da ste skapirali šta i kako "switch" i "case" statements rade.

Moguće su greške, ne zamerite. Ukoliko uočite nešto što je nepravilno, napišite u komentaru.
Ukoliko Vam treba dodatna pomoć oko ove oblasti, napišite u komentaru ove teme (ne privatne poruke).
Sve ovo možete da pronađete online, ili na alternativnim samp-wiki stranicama, ali evo i ovde za one lenje osobe.
Poslednja Izmena: Mart 12, 2022, 13:57:54 POSLE PODNE od Vasic
• Website: www.vasic.dev
Web Development & Cyber Security