Switch case

For mer info klikk her.

Intro

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).

Meny

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