Rozhodování
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