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.

Vasic

*

Usus est magister optimus.

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:

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
	}
}


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

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
}


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:

switch (NekaFunkcija())
{
	case 1: {}
	case 2: {}
	case 3: {}
}


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

if (NekaFunkcija() == 1) {}
else if (NekaFunkcija() == 2) {}
else if (NekaFunkcija() == 3) {}


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:

case 1, 2, 3, 4:


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

if (bla == 1 || bla == 2 || bla == 3 || bla == 4)


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

case 1 .. 4:


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

if (bla >= 1 && bla <= 4)


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





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




Random primer:

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.");
	}
}





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