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 (https://balkan-samp.com/forum/index.php?topic=141421.0)). 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.