IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 12 - Podmínky ve VB.NET podruhé - Ternární výraz a Select Case

V předešlém cvičení, Řešené úlohy k 11. lekci VB.NET, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

V dnešní lekci si představíme 2 další konstrukce, které souvisejí s podmínkami. Jedná se o oddechový tutoriál, kterým toto téma dokončíme.

Ternární operátor

Často se nám stává, že někde potřebujeme nastavit 2 různé hodnoty podle toho, zda platí nějaká podmínka.

Příklad - Výpis pohlaví

Představme si, že máme např. pohlaví uživatele uložené jako Boolean (muž by byl True) a my bychom ho chtěli převést do textu. S dosavadními znalostmi bychom napsali asi takovýto kód:

Dim muz As Boolean = True   'nějaká proměnná udávající pohlaví
Dim nazevPohlavi As String
If muz Then
    nazevPohlavi = "muž"
Else
    nazevPohlavi = "žena"
End If
Console.WriteLine(nazevPohlavi)

Výstup programu je samozřejmě následující:

Konzolová aplikace
muž

Kód je poměrně "upovídaný" na to, že jen přepíná mezi dvěma hodnotami. Proto programovací jazyky často podporují tzv. ternární výraz.

Syntaxe ternárního výrazu

Pomocí tohoto operátoru můžeme získat hodnotu podle platnosti logického výrazu. Zapíšeme ho takto:

Dim promenna as typ = If(podmínka, hodnota1, hodnota2)

Syntaxe je velmi jednoduchá, do závorky za klíčové slovo If uvedeme podmínku, resp. logický výraz. Pokud je splněno, operátor vrátí hodnota1, v opačném případě hodnota2. Jak snadné! :) Název operátoru je odvozený od toho, že má 3 části (podmínka, první hodnota a druhá hodnota), proto ternární.

Příklad - Použití ternárního výrazu

Pojďme si ternární operátor vyzkoušet na příkladu s pohlavím:

Dim muz As Boolean = True   'nějaká proměnná udávající pohlaví
Dim nazevPohlavi As String = If(muz, "muž", "žena")
Console.WriteLine(nazevPohlavi)

Ve starších verzích se místo If používal IIf. Rozdíly jsou mezi nimi minimální a proto se jimi v tomto kurzu ani nebudeme zabývat. Stačí, když si zapamatujete, že vhodnější je v současnosti použít If.

Vnořování ternárních operátorů

Ternární operátory lze teoreticky zanořovat do sebe a tím reagovat i na 3 a více hodnot. Nicméně ve většině případů zanořování spíše kód znepřehlední, vznikají totiž dlouhé nebo podivně zalomené řádky a není na první pohled vidět, jaká část se kdy spustí. Ukažme si, jak by se pomocí vnořování ternárních výrazů vyřešil výpis 3 pohlaví:

Dim pohlavi As Char = "X"   'nějaká proměnná udávající pohlaví
Dim nazevPohlavi As String = If(pohlavi = "M", "muž", If(pohlavi = "F", "žena", "jiné"))
Console.WriteLine(nazevPohlavi)

Pro příklad výše by bylo lepší vytvořit vlastní metodu, což si ale ukážeme až v navazujícím kurzu objektově orientovaného programování.

Select Case

S konstrukcí Select Case jsme se již setkali v lekci Podmínky (větvení). Dnes si ukážeme další možnosti při psaní podmínek.

Příklad - Čtvrtletí

Předpokládejme, že chceme podle měsíce v roce zjistit, jaké je čtvrtletí. K tomu můžeme použít sekvenci If - ElseIf - Else. Příklad by vypadal následovně:

Dim mesic As Integer = 11
If mesic >= 1 And mesic <= 3 Then
    Console.WriteLine("Je první čtvrtletí.")
ElseIf mesic >= 4 And mesic <= 6 Then
    Console.WriteLine("Je druhé čtvrtletí.")
ElseIf mesic >= 7 And mesic <= 9 Then
    Console.WriteLine("Je třetí čtvrtletí.")
ElseIf mesic >= 10 And mesic <= 12 Then
    Console.WriteLine("Je čtvrté čtvrtletí.")
Else
    Console.WriteLine("Chybně zadané číslo měsíce.")
End If

Jak ale použít Select Case pro takovýto příklad? Možná by vás napadl následující zápis:

Dim mesic As Integer = 11
Select Case mesic
    Case 1
        Console.WriteLine("Je první čtvrtletí.")
    Case 2
        Console.WriteLine("Je první čtvrtletí.")
    Case 3
        Console.WriteLine("Je první čtvrtletí.")
    Case 4
        Console.WriteLine("Je druhé čtvrtletí.")
    Case 5
        Console.WriteLine("Je druhé čtvrtletí.")
    Case 6
        Console.WriteLine("Je druhé čtvrtletí.")
    Case 7
        Console.WriteLine("Je třetí čtvrtletí.")
    Case 8
        Console.WriteLine("Je třetí čtvrtletí.")
    Case 9
        Console.WriteLine("Je třetí čtvrtletí.")
    Case 10
        Console.WriteLine("Je čtvrté čtvrtletí.")
    Case 11
        Console.WriteLine("Je čtvrté čtvrtletí.")
    Case 12
        Console.WriteLine("Je čtvrté čtvrtletí.")
End Select

Příklad funguje spolehlivě, problém však je, že jsme si tímto zápisem moc nepomohli. Podobnému opakujícímu se kódu bychom se vždy měli vyhýbat.

Sloučení podmínek

Zkusme to ještě jednou a využijme možnosti sloučení podmínek, které nám Select Case poskytuje. Možností je hned několik:

Dim mesic As Integer = 6
Select Case mesic
    Case 1, 2, 3    'výčet hodnot oddělených čárkou
        Console.WriteLine("Je první čtvrtletí.")
    Case 4 To 6 'interval od - do
        Console.WriteLine("Je druhé čtvrtletí.")
    Case Is <= 9    'menší nebo rovno hodnotě
        Console.WriteLine("Je třetí čtvrtletí.")
    Case Else   'zbývající
        Console.WriteLine("Je čtvrté čtvrtletí.")
End Select

Ukázka výstupu aplikace:

Konzolová aplikace
Je druhé čtvrtletí.

Tento zápis je již mnohem stručnější a přehlednější! Konstrukce Select Case nepodporuje tzv. propadávání. Čili podmínka Is <= 9 pro hodnoty od 1 do 6 nebude vyhodnocována, jelikož tyto hodnoty zpracuje již první nebo druhý case a poté je Select Case ukončen (jakmile je některá podmínka splněna, další podmínky se již nevyhodnocují).

Styly podmínek v Select Case lze i kombinovat, např. pro kladná čísla, která nejsou dvouciferná, by šlo napsat: Case 1, 2, 3, 4 To 9, Is > 99.

V příští lekci, Cykly ve VB.NET podruhé - While, Do-Loop, Exit a Continue, na nás čeká další syntaxe okolo cyklů, na kterou můžeme narazit v cizích zdrojových kódech.


 

Předchozí článek
Řešené úlohy k 11. lekci VB.NET
Všechny články v sekci
Základní konstrukce jazyka Visual Basic (VB.NET)
Přeskočit článek
(nedoporučujeme)
Cykly ve VB.NET podruhé - While, Do-Loop, Exit a Continue
Článek pro vás napsal Alesh
Avatar
Uživatelské hodnocení:
12 hlasů
Aktivity