Příkazy výběru

Tip

Tento článek je součástí části Základy pro vývojáře, kteří už znají aspoň jeden programovací jazyk a učí se jazyk C#. Pokud s programováním teprve začínáte, začněte nejprve kurzy Začínáme . Kompletní syntaxi najdete v části příkazy výběru v referenční příručce k jazyku.

Pochází z jiného jazyka? C++, Java a JavaScript všechny vycházejí z jazyka C, takže if, else a switch se v C# čtou stejně. Jeden rozdíl stojí za zmínku: C# zakazuje pád mezi neprázdné switch případy a každý case popisek může testovat vzor , nikoli pouze konstantu. Pokud přicházíte z Pythonu, v C# if/else if/else odpovídá if/elif/else a switch založený na vzorech v C# se nejvíce blíží příkazu match v Pythonu.

Příkazy výběru vyberou, který blok kódu se spouští na základě podmínky. Jazyk C# poskytuje dva konstrukty: if (s volitelným else) pro větvení na základě logické hodnoty a switch pro porovnání jedné hodnoty s několika možnostmi. Logický výraz je libovolný výraz, který se vyhodnotí jako true nebo false, například porovnání temperature >= 25.

Větev s if a else

Příkaz if provede svůj blok pouze tehdy, když jeho booleovský výraz má hodnotu true. else Přidejte blok pro zadání kódu, který se spustí, když je falsepodmínka:

int temperature = 28;

// An if statement runs its block only when the condition is true.
// The else block runs when the condition is false.
if (temperature >= 25)
{
    Console.WriteLine("Warm"); // => Warm
}
else
{
    Console.WriteLine("Cool");
}

Tělo konstrukce if nebo else tvoří jediný příkaz, například přiřazení nebo volání metody. Blokový příkaz je sám o sobě jediným příkazem, který uzavírá nula nebo více příkazů ve složených závorkách ({ }).

Mnoho kódovacích standardů doporučuje uzavřít těla větví do složených závorek, a to i pro jeden příkaz. Složené závorky jednoznačně vymezují rozsah platnosti. Zabraňuje časté chybě: pozdějšímu přidání druhého řádku, u kterého očekáváte, že se spustí jen při splnění podmínky, ale místo toho se spustí bez podmínky. Pouze složené závorky určují, které příkazy patří do větve. C# nepovažuje bílé znaky za významné, takže samotné odsazení nikdy nemá význam. Složené závorky jsou povolené i u jediného řádku: blok tvoří jediný příkaz, který větev vykoná. Odsazujte kód kvůli přehlednosti, ale blok vymezujte pomocí složených závorek.

Testování několika podmínek pomocí else if

Pokud si chcete vybrat mezi více než dvěma cestami, zřetězte podmínky s else if. Jazyk C# vyhodnocuje každou podmínku v pořadí a spustí první blok, jehož podmínkou je true, a pak přeskočí zbytek. Poslední else zpracovává všechny zbývající případy:

int score = 82;

// Chain conditions with else if. The first branch whose condition is
// true runs; the compiler skips the rest.
string grade;
if (score >= 90)
{
    grade = "A";
}
else if (score >= 80)
{
    grade = "B";
}
else if (score >= 70)
{
    grade = "C";
}
else
{
    grade = "F";
}

Console.WriteLine(grade); // => B

Na pořadí v řetězci záleží. Protože platí první odpovídající podmínka, umístěte nejkonkrétnější podmínky na začátek. V předchozím příkladu testování score >= 80 před score >= 70 zajišťuje, že skóre 82 se namapuje na "B" místo na "C".

Porovnat hodnotu s příkazem switch

Když porovnáte jednu hodnotu s mnoha diskrétními případy, switch příkaz čte jasněji než dlouhý else if řetězec. Podobně jako ifpříkaz switch je příkaz větvení: zvolí, který kód se má spustit. Každý case popisek obsahuje hodnotu, která se má shodovat, a každý case oddíl končí příkazem break . Seskupte popisky tak, aby sdílely jednu část textu, a sekci default použijte pro hodnoty, kterým neodpovídá žádný případ:

DayOfWeek day = DayOfWeek.Saturday;

// A switch statement compares one value against several case labels.
// Stacked labels share a body. Each section ends with break, and the
// default section runs when no case matches.
switch (day)
{
    case DayOfWeek.Saturday:
    case DayOfWeek.Sunday:
        Console.WriteLine("Weekend"); // => Weekend
        break;
    default:
        Console.WriteLine("Weekday");
        break;
}

Na rozdíl od jazyků C a Java jazyk C# neumožňuje přechod z jedné neprázdné sekce case do následující. Každý oddíl, který obsahuje kód, musí končit značkou break (nebo jiným příkazem pro skok, například return nebo goto). Toto pravidlo zabraňuje náhodným chybám, které jsou v těchto jazycích běžné.

Testování vzorů pomocí case a when

Popisek case není omezen na konstantní hodnoty. Může otestovat vzor, což je pravidlo, které popisuje tvar nebo hodnotu dat. Relační vzor, například < 0 odpovídá jakékoli hodnotě menší než nula. Přidejte klauzuli when, kterou přidáte další podmínku, která musí být také true splněna, aby se případ shodoval:

int measurement = 42;

// A case label can test a pattern instead of a constant. A when clause
// adds a condition that must also be true for the case to match.
switch (measurement)
{
    case < 0:
        Console.WriteLine("Negative");
        break;
    case 0:
        Console.WriteLine("Zero");
        break;
    case > 0 when measurement % 2 == 0:
        Console.WriteLine("Positive and even"); // => Positive and even
        break;
    default:
        Console.WriteLine("Positive and odd");
        break;
}

Případy založené na vzorech se vyhodnocují shora dolů, takže konkrétnější vzory patří před obecnější. Úplný katalog vzorů najdete v tématu porovnávání vzorů.

Vyberte hodnotu pomocí výrazu

Příkazy if a switch určují, který kód se spustí. Pokud místo toho potřebujete zvolit hodnotu, použijte výraz. Výraz má za výsledek hodnotu, takže ho můžete použít všude tam, kde se očekává hodnota, například na pravé straně přiřazení nebo jako argument metody. Jazyk C# nabízí formuláře výrazů, které vyberou hodnotu z alternativ, jako je podmíněný operátor a switch výraz.

Podmíněný operátor ?:

Podmíněný operátor ?: vybere jednu ze dvou hodnot na základě logické podmínky.

Informace o jeho syntaxi, zkráceném vyhodnocování a pokyny, kdy ho zvolit místo if/else, najdete v tématu Podmíněný operátor ?:.

výraz switch

Výraz switch je protějšek výrazu příkazu switch . Místo spuštění kódu pro odpovídající případ se vyhodnotí jako hodnota. Je to stručnější než přiřazovat hodnotu v každé větvi příkazu switch a kompilátor vás upozorní, pokud větve nepokrývají všechny možné vstupy. Výraz switch je základní součástí porovnávání vzorů. Informace o tom, kdy a jak ho používat, najdete v tématu porovnávání vzorů a odkazu na switch výraz .

Viz také