switch
Podmíněný příkaz, který porovnává řídící hodnotu se seznamem dalších hodnot a podle toho větví vyhodnocení. Příkaz lze také použít pro větvení podle seznamu podmínek.
switch
[ test-expression ]case
expression-1 body-1case
expression-2 body-2 … [default
body-default ]/switch
- test-expression
- Hodnota, která se porovnává s výrazy v jednotlivých blocích. Je nepovinná, pokud není uvedena, jako default se bere
true
. - expression-1, expression-2…
- Výrazy, se kterými se porovnává test-expression.
- body-1, body-2…
- Blok, který se vyhodnotí, pokud se odpovídající výraz shoduje.
- body-default
- Blok, který se vyhodnotí, pokud se žádný z uvedených výrazů neshoduje.
Je možné to formulovat tak, že příkaz má fakticky dvě verze: s řídícím výrazem (test-expression) a bez něj.
- Pokud je uveden řídící výraz, vyhodnotí se a výsledek se postupně porovnává s expression-1, expression-2 atd. Při nalezení první shody se vypíše odpovídající blok a zpracování příkazu se ukončí. Pokud nebyla nalezena žádná shoda, vyhodnotí se body-default.
- Pokud není uveden řídící výraz, vyhodnocují se postupně expression-1, expression-2 atd. Při nalezení první hodnoty, která se při konverzi na logickou hodnotu vyhodnotí jako
true
, se vypíše odpovídající blok a zpracování příkazu se ukončí. Pokud nebyla nalezena žádná taková hodnota, vyhodnotí se body-default.
Na rozdíl od jiných jazyků tu není žádná obdoba příkazu break
(například v C) – každý blok končí před bezprostředně následujícím klíčovým slovem case
nebo default
.
Příklad: Příkaz switch
S řídícím výrazem
{switch _request.params.statusInfo}
{case "ok"}
<p>Váš požadavek byl úspěšně odeslán.</p>
{case "error"}
<p>Při odeslání požadavku došlo k chybě..</p>
{/switch}
Bez řídícího výrazu
{switch}
{case _request.params.statusInfo == "ok"}
<p>Váš požadavek byl úspěšně odeslán.</p>
{case _request.params.statusInfo == "error"}
<p>Při odeslání požadavku došlo k chybě..</p>
{/switch}
Ilustrace dvojí syntaxe příkazu switch v TFS. Oba uvedené fragmenty se vyhodnocují zcela stejně.
Pro vložení příspěvku do diskuse se přihlašte.