Huhu, da ich immer wieder riiiiesige Abfragen sehe und mir denke, warum benutzt der / diejenige nicht anstatt if Switch? Daher dachte ich mir, mache ich ein Tut dazu wo das ganze erklärt wird, also legen wir direkt mal los.
Sicherlich kennt jeder von euch die normalen if Abfragen
new ValueXYZ = 5;
if(ValueXYZ > 5)
else if(ValueXYZ < 5)
else if(ValueXYZ == 5)// usw...
Wenn man das ganze dann mit riesigen Abfragehaufen zu tun hat, wirds schnell mal unübersichtlich. Daher gibts eine raffinierte Funktion die das ganze erheblich erleichtert und Code spart. (Dies sind einzeilige(!) Cases, mehrzeilige werden weiter unten erklärt)
new ValueXYZ = 5;
switch(ValueXYZ)
{
case 0: // Dieser Fall (engl. Case = Fall) würde aufgerufen werden wenn die Variable den Wert 0 hätte
case 1: //Wert von 1 oder als if Abfrage if(ValueXYZ == 1)
case 2: // Wert von 2 bzw if(ValueXYZ == 2)
case 3: // Wert von 3 if(ValueXYZ == 3)
//ich springe mal ein wenig vorwärts
case 5: // Dieser Fall würde nun aufgerufen werden da unsere Variable genau 5 beträgt!
} // SChließt Switch wieder
Jedoch gibts noch weitaus mehr Möglichkeiten, denn anstatt
if(ValueXYZ == 0 || ValueXYZ == 1) // Usw.
geht es mit Switch noch wesentlich kürzer
new ValueXYZ = 5;
switch(ValueXYZ)
{
case 0,1,2,3,4:// Wenn ValueXYZ 1, 2, 3, 4 oder 0 wäre würde dieser Case aufgerufen werden
case 5: // Jedoch wird nun dieser Code aufgerufen
}
Eine weitere Möglichkeit Switch zu verkürzen stellt Folgende dar
new ValueXYZ = 5;
switch(ValueXYZ)
{
case 0 .. 4://Dasselbe wie im Beispiel davor nur kürzer
case 5:
}
Als letztes gibt es nur noch eine Sache zu erklären und zwar default: das im Grunde aufgerufen wird wie else
if(IsPlayerAdmin(playerid))
{
}
else // Dies entspräche default:
{
}
new ValueXYZ = 5;
switch(ValueXYZ)
{
case 0 .. 4: //also if(ValueXYZ >= 0 && ValueXYZ <= 4)
case 5: // if(ValueXYZ == 5)
default: // Dieser Code würde ausgeführt werden wenn ValueXYZ weder zwischen 0 und 5 liegt, also z.B. 13 wäre
}
Mehrzeilige Abfragen sähen wie folgt aus.
new ValueXYZ = 5;
switch(ValueXYZ)
{
case 0 .. 4:
{
print("Dieser Code wurde leider nicht ausgeführt.");
print("Denn ValueXYZ ist > 4.");
}
case 5:
{
print("Dieser Code wird ausgeführt,");
printf("denn ValueXYZ ist %d", ValueXYZ);
}
default:
{
print("Dieser Code wird ebenfalls nicht ausgeführt,");
print("denn die Variable ist == 5 und nicht > 5");
}
}
Im Grunde also wie ganz normale if-Abfragen, nur wie ich finde, einfacher.
Hinweis:
Man kann innerhalb des Case-Teils auch if-Abfragen benutzen!
Anwendungsmöglichkeiten wären z.B. Callbacks wie OnPlayerSelectedMenuRow oder OnDialogResponse.
Konstruktive Kritik ist erwünscht.
Lg ]hp[
/edit mehrzeilige Cases hinzugefügt.