7. Ternární podmíněný operátor

Příkaz if nelze použít jako součást výrazu. Jazyk C# nabízí tzv. ternární podmíněný operátor ?: .Obecná syntaxe tohoto operátoru podmíněného výrazu vypadá následovně:

podmínka ? výraz1 : výraz2

kde:

  • podmínka - podmínka, která musí být vyhodnocena jako true nebo false
  • ?: - ternární podmíněný operátor
  • výraz1 - návrat pokud je podmínka splněna
  • výraz2 - návrat pokud není podmínka splněna (oba výrazy musí být stejného typu, nebo musí být převedeny na stejný typ)

Podmíněný operátor je asociativní zprava, to znamená že výraz:

a ? b : c ? d : e

by byl vyhodnocen následujícím způsobem:

a ? b : (c ? d : e)


Ilustrativní příklad Maximum
  • Popis: Příklad podmíněného výrazu výběru většího čísla ze dvou čísel
  • Zadání: Ve statické metodě Maximum s návratem zkuste naprogramovat příklad úplného větvení příkazu if pro výběr většího ze dvou čísel. Metoda přijímá dva celočíselné formální parametry a a b. Pokud platí že a > b, pak je metody navrací parametr a a pokud definovaná podmínka neplatí, výstupem metody je parametr b. V hlavní metodě Main použijte skutečné parametry nazvané jako x a y. Parametrům přiřaďte hodnotu x = 2 a y = 3. V metodě Main zavolejte metodu Maximum a předejte jí oba skutečné parametry v pořadí x a y. Vypište získané maximum v metodě Main 
  • Řešení: Bude postupně probráno v následujícím textu

Následující zdrojový kód obsahuje tělo metody Maximum, která vrací maximum ze dvou vstupních čísel, tedy formální parametr s větší hodnotou – viz Kód 1.

//Deklarace metody pro nalezení většího čísla (maxima ze dvou čísel)
static int Maximum(int a, int b)
    {
        //Jestliže je větší 'a' výstupem je 'a'
        if (a > b) return a;
        //jinak je výstupem 'b'
        else return b;
    }

Kód 1: Příklad podmíněného výrazu v metodě Maximum

Ve statické metodě Main bychom metodu Maximum volali a vypsali její návrat přiřazený do lokální proměnné výsledek následujícím způsobem - viz Kód 2.

static void Main(string[] args)
{
    //Deklarace celočíselné proměnné včetně inicializace
    int x = 2;
    //Deklarace celočíselné proměnné včetně inicializace
    int y = 3;
    //Deklarace celočíselné proměnné
    int vysledek;
    //Přířazeni maximální hodnoty (výstupu funkce) do proměnné 
    vysledek = Maximum(x, y);
    //Výpis hodnoty maxima
    Console.WriteLine("Výsledek je: {0}", vysledek);
    //Čekání na stisk klávesy -> ukončení programu
    Console.ReadKey();
}

Kód 2: Příklad zavolání metody Maximum s výstupem

Na základě výpisu v konzole vidíme, že vypsaná hodnota maxima je 3 - viz Výstup programu - Kód 2.

Výsledek je: 3

Výstup programu - Kód 2: Ukázka výsledku podmíněného výrazu


Ilustrativní příklad MaximumOperator
  • Popis: Příklad použití operátoru ? : u podmíněného výrazu pro výběr většího čísla ze dvou čísel
  • Zadání: Modifikujte předchozí statickou metodu Maximum za pomoci operátoru ? : tak, aby princip této metody zůstal stejný, tj. metoda přijímá dva celočíselné parametry a a b. Pokud platí že a > b, pak je metody navrací parametr a a pokud definovaná podmínka neplatí, výstupem metody je parametr b. Metodu s návratem nazvěte MaximumOperator. V hlavní metodě Main použijte skutečné parametry nazvané jako x a y. Parametrům přiřaďte hodnotu x = 2 a y = 3. V metodě Main zavolejte metodu Maximum a předejte jí oba skutečné parametry v pořadí x a y. Vypište získané maximum v metodě Main 
  • Řešení: Bude postupně probráno v následujícím textu


Pokud bychom využili operátor ? : pro předchozí příklad, zdrojový kód metody s návratem nazvané jako MaximumOperator by vypadal následovně – viz Kód 3. Jak vidíme, došlo ke značné redukci zdrojového kódu, o což by měla usilovat většina programátorů.

//Deklarace metody pro nalezení většího čísla s použitím operátoru ? :
static int MaximumOperator(int a, int b)
{
    //Jestliže je větší 'a' výstupem je 'a' jinak 'b'
    return a > b ? a : b;
}

Kód 3: Příklad použití ternárního podmíněného operátoru ? : u podmíněného výrazu v metodě MaximumOperator

V následujícím zdrojovém kódu, je demonstrováno volání statické metody MaximumOperator ve statické metodě Main, které je naprosto totožné, jako v předchozím případě volání metody Maximum - viz Kód 4. 

static void Main(string[] args)
{
    //Deklarace celočíselné proměnné včetně inicializace
    int x = 2;
    //Deklarace celočíselné proměnné včetně inicializace
    int y = 3;
    //Deklarace celočíselné proměnné
    int vysledek;
    //Přířazeni maximální hodnoty (výstupu funkce) do proměnné 
    vysledek = MaximumOperator(x, y);
    //Výpis hodnoty maxima
    Console.WriteLine("Výsledek je: {0}", vysledek);
    //Čekání na stisk klávesy -> ukončení programu
    Console.ReadKey();
}

Kód 4: Příklad zavolání metody MaximumOperator s výstupem

Na základě výpisu v konzole vidíme, že vypsaná hodnota maxima získaná z metody MaximumOperator je stejná jako v předchozím případě metody Maximum - viz Výstup programu - Kód 4.
Výsledek je: 3

Výstup programu - Kód 4: Ukázka výsledku ternárního podmíněného operátoru