TOC

This article has been localized into Czech by the community.

Řídící struktury:

Příkaz switch

Příkaz switch je jako série příkazů if, které všechny kontrolují tu samou proměnnou, ale s jinou akcí pro každou možnou hodnotu. To může znít složitě, ale ve skutečnosti to tak není. Podívejte se na tento jednoduchý příklad:

let answer = prompt("Do you like JavaScript?");
switch(answer)
{
	case "yes":
		alert("That's great!");
		break;
	case "no":
		alert("Sorry to hear that!");
		break;
	case "maybe":
		alert("I'll ask again later...");
		break;	
}

V prvním, řádku položíme otázku. Poté použijeme proměnnou odpověď jako podmínku pro příkaz switch. Uvnitř příkazu switch definujeme několik možných hodnot, proti kterým budeme odpověď porovnávat (ano, nebo možná), pomocí klíčového slova case. Každá akce vyvolá jiné upozornění.

Klíčové slovo break

Všimněte si klíčového slova break použitého na konci každého případu. Příkaz switch vyžaduje, abyste správně ukončili každý případ, buď použitím klíčového slova break, nebo v případě, že jste uvnitř funkce, použitím klíčového slova return pro úplné ukončení funkce. Pokud toto vynecháte, provedení přejde na všechny případy pod tím, který odpovídá hodnotě. To můžete snadno otestovat odstraněním klíčových slov break z výše uvedeného příkladu a znovu spuštěním příkladu.

Můžete vynechat poslední klíčové slovo break, protože příkaz switch tam končí bez ohledu na cokoli, ale toto neplatí pro všechny programovací jazyky, takže pro konzistenci mnoho programátorů má tendenci vždy jej zahrnout pro všechny případy.

Skupiny case

Někdy chcete, aby několik případů provedlo stejnou akci. To není problém, protože můžete jednoduše naskládat na sebe tolik případů, kolik potřebujete, aby používaly stejný kód. Zde je příklad:

let answer = prompt("Do you like JavaScript?");
switch(answer)
{
	case "yes":
		alert("That's great!");
		break;
	case "no":
	case "nope":	
	case "nay":
	case "nix":
		alert("Sorry to hear that!");
		break;
	case "maybe":
		alert("I'll ask again later...");
		break;	
}

Jak vidíte, máme nyní v příkazu switch celý seznam možností pro část "ne", přičemž různé variace této negativní odpovědi vedou ke stejné zprávě.

Klíčové slovo default (výchozí)

Výše uvedený příklad má poměrně zřejmou chybu: Pokud uživatel nezadá přesnou hodnotu, která odpovídá některému z případů, nic se nestane. Pro situaci jako je tato je dobré mít záložní akci - něco, co bude provedeno, pokud nejsou ostatní možnosti relevantní. Naštěstí nám to JavaScript umožňuje udělat právě pomocí klíčového slova default. Zde je upravená verze výše uvedeného příkladu, kde toto přidáváme:

let answer = prompt("Do you like JavaScript?");
switch(answer)
{
	case "yes":
		alert("That's great!");
		break;
	case "no":
		alert("Sorry to hear that!");
		break;
	case "maybe":
		alert("I'll ask again later...");
		break;
	default:
		alert("Please enter 'yes', 'no' or 'maybe'...");
		break;
}

S tímto na místě může náš příkaz switch zvládnout všechny situace, protože máme záložní akci z klíčového slova default.

Porovnání případů case

Další věc, kterou bychom museli zvážit, pokud by výše uvedený příklad byl použit v reálném světě, je způsob, jakým je každý případ porovnán s podmínkou. Například kontrolujeme "yes", ale řetězce jsou vždy porovnávány s citlivostí na velká a malá písmena, takže pokud by uživatel napsal "Yes", "YeS" nebo "YES", náš první případ by nesouhlasil. Musíme to vždy zpracovat, například převedením odpovědi na malá písmena před kontrolou:

let answer = prompt("Do you like JavaScript?");
switch(answer.toLowerCase())
{
	case "yes":
		alert("That's great!");
		break;
...

Další věc, kterou potřebujete zvážit, je skutečnost, že veškeré porovnávání se provádí pomocí operátoru přísného porovnání rovnosti (===). To znamená, že pokud je váš výraz ve switch příkazu řetězec, můžete jej porovnávat pouze s jiným řetězcem, i když víte, že tento řetězec je ve skutečnosti číslo.

Dovolte mi ilustrovat na příkladu:

let answer = prompt("41 or 42?");
switch(answer)
{
	case 41:
		alert("41? Really??");
		break;
	case 42:
		alert("42 - of course!");
		break;
	default:
		alert("Unknown answer...");
		break;
}

Tento příklad NEBUDE fungovat, jak se očekává. Proč? Protože výsledek funkce prompt() je textový řetězec (i když uživatel zadá číselnou hodnotu), ale my jej porovnáváme s čísly (41 nebo 42). Tento problém budete muset vyřešit, například převodem odpovědi na číslo před jejím porovnáním, nebo porovnáním s řetězci místo toho. Pojďme změnit první řádek příkladu a použít funkci Number() k převodu výsledku funkce prompt() na číslo:

let answer = Number(prompt("41 or 42?"));
switch(answer)
{
	case 41:
		alert("41? Really??");
		break;
	case 42:
		alert("42 - of course!");
		break;
	default:
		alert("Unknown answer...");
		break;
}

Shrnutí

Se switch příkazem můžete porovnat výraz s více možnostmi a provést akci na jejich základě, něco jako řada příkazů if..else..if, ale v čitelnějším formátu. Pamatujte, že switch příkaz používá přísné porovnání rovnosti.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!