Når man prograerer kan man ende opp med en situasjon som dette:
if (value == 1) {
// do something
} else if (value == 2) {
// do something else
} else if (value == 3) {
// do something else
} else if (value == 4) {
// do something else
} else if (value == 5) {
// do something else
} else {
// do default action
}
Denne koden er fullt gyldig og kjørbar kode, men den har et par problemer sammenlignet med switch case / switch. For det første er koden her veldig lite effektiv, noe som ikke er et fokus i faget, men verdt å vite. Her sammennligner vi value med et tall mange ganger, istedenfor å bare hoppe direkte til den rikige seksjonen. For det andre regnes switch som lettere å lese. Dette fordi switch ikke repeterer like mye I tillegg gjør den et tydelig skille mellom situasjoner hvor koden skal gjøre ulike handlinger avhengig av en gitt tilstand. Du har eller kommer kanskje senere til å høre om tilstandsmaskiner, da bruker man typisk en switch.
Under ser du den ekvivalente implementasjonen for koden over, men med switch case.
switch (value)
{
case 1:
// do something
break;
case 2:
// do something else
break;
case 3:
// do something else
break;
case 4:
// do something else
break;
case 5:
// do something else
break;
default:
// do default action
break;
}
Merk: Value er en variabel som må være en talltype (eks: int, char, enum).
La oss nå implementere et eksempel som kan komme til nytte i øvingene. Hvis du skal lage ulike funskjoner som kjører/tester ulike deler av koden, kan det være nyttig å ha en meny hvor du velger hvilken funksjon som kjører. I eksempelet under, skriver vi ut en meny, så kan brukeren velge å kjøre en funksjon eller avslutte menyen.
void menu() {
while (1) {
std::cout << "Menu\n"
<< "0.\t quit\n"
<< "1.\tTest program 1\n"
<< "2.\tTest program 2\n"
<< "3.\tTest program 3\n"
<< "4.\tPlay game\n"
<< "Input: ";
int menu_choice;
std::cin >> menu_choice;
switch (menu_choice)
{
case 1:
test_1();
break;
case 2:
test_2();
break;
case 3:
test_3();
break;
case 4:
play_game();
break;
default:
return; // quit program
break;
}
}
}