Autor: JIz

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-1
case 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.