IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

11. diel - Podmienky vo VB.NET druhýkrát - ternárne výraz a Select Case

V predchádzajúcom cvičení, Riešené úlohy k 10. lekcii VB.NET, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.

V dnešnej lekcii si predstavíme 2 ďalšie konštrukcie, ktoré súvisia s podmienkami. Jedná sa o oddychový tutoriál, ktorým túto tému dokončíme.

Ternárne operátor

Často sa nám stáva, že niekde potrebujeme nastaviť 2 rôzne hodnoty podľa toho, či platia nejaké podmienka.

Príklad - Výpis pohlavia

Predstavme si, že máme napr. Pohlavia užívateľa uložené ako Boolean (muž by bol True) a my by sme ho chceli previesť do textu. S doterajšími znalosťami by sme napísali asi takýto kód:

Dim muz As Boolean = True   'nejaká premenná udávajúci pohlavia
Dim nazevPohlavi As String
If muz Then
    nazevPohlavi = "muž"
Else
    nazevPohlavi = "žena"
End If
Console.WriteLine(nazevPohlavi)

Výstup programu je samozrejme nasledovné:

Konzolová aplikácia
muž

Kód je pomerne "ukecaný" na to, že len prepína medzi dvoma hodnotami. Preto programovacie jazyky často podporujú tzv. Ternárne výraz.

Syntaxe ternárního výrazu

Pomocou tohto operátora môžeme získať hodnotu podľa platnosti logického výrazu. Zapíšeme ho takto:

Dim premenna as typ = If(podmienka, hodnota1, hodnota2)

Syntax je veľmi jednoduchá, do zátvorky za kľúčové slovo If uvedieme podmienku, resp. logický výraz. Ak je splnené, operátor vráti hodnota1, v opačnom prípade hodnota2. Ako ľahké!:) Názov operátora je odvodený od toho, že má 3 časti (podmienka, prvá hodnota a druhá hodnota), preto ternárne.

Príklad - Použitie ternárního výrazu

Poďme si ternárne operátor vyskúšať na príklade s pohlavím:

Dim muz As Boolean = True   'nejaká premenná udávajúci pohlavia
Dim nazevPohlavi As String = If(muz, "muž", "žena")
Console.WriteLine(nazevPohlavi)

V starších verziách sa namiesto If používal IIf. Rozdiely sú medzi nimi minimálne a preto sa nimi v tomto kurze ani nebudeme zaoberať. Stačí, keď si zapamätáte, že vhodnejšie je v súčasnosti použiť If.

Vnorovanie ternárne operátorov

Ternárne operátormi možno teoreticky ponoriť do seba a tým reagovať aj na 3 a viac hodnôt. Avšak vo väčšine prípadov ponáranie skôr kód znepřehlední, vznikajú totiž dlhé alebo podivne zalomené riadky a nie je na prvý pohľad vidieť, aká časť sa kedy spustí. Ukážme si, ako by sa pomocou vnorovanie ternárne výrazov vyriešil výpis 3 pohlavie:

Dim pohlavi As Char = "X"   'nejaká premenná udávajúci pohlavia
Dim nazevPohlavi As String = If(pohlavi = "M", "muž", If(pohlavi = "F", "žena", "iné"))
Console.WriteLine(nazevPohlavi)

Pre príklad vyššie by bolo lepšie vytvoriť vlastnú metódu, čo si ale ukážeme až v nadväzujúcom kurze objektovo orientovaného programovania.

Select Case

S konštrukciou Select Case sme sa už stretli v lekcii Podmienky (vetvenia). Dnes si ukážeme ďalšie možnosti pri písaní podmienok.

Príklad - Štvrťrok

Predpokladajme, že chceme podľa mesiaca v roku zistiť, aké je štvrťrok. K tomu môžeme použiť sekvenciu If - ElseIf - Else. Príklad by vyzeral nasledovne:

Dim mesic As Integer = 11
If mesic >= 1 And mesic <= 3 Then
    Console.WriteLine("Je prvý štvrťrok.")
ElseIf mesic >= 4 And mesic <= 6 Then
    Console.WriteLine("Je druhý štvrťrok.")
ElseIf mesic >= 7 And mesic <= 9 Then
    Console.WriteLine("Je tretí štvrťrok.")
ElseIf mesic >= 10 And mesic <= 12 Then
    Console.WriteLine("Je štvrtý štvrťrok.")
Else
    Console.WriteLine("Chybne zadané číslo mesiace.")
End If

Ako ale použiť Select Case pre takýto príklad? Možno by vás napadol nasledujúce zápis:

Dim mesic As Integer = 11
Select Case mesic
    Case 1
        Console.WriteLine("Je prvý štvrťrok.")
    Case 2
        Console.WriteLine("Je prvý štvrťrok.")
    Case 3
        Console.WriteLine("Je prvý štvrťrok.")
    Case 4
        Console.WriteLine("Je druhý štvrťrok.")
    Case 5
        Console.WriteLine("Je druhý štvrťrok.")
    Case 6
        Console.WriteLine("Je druhý štvrťrok.")
    Case 7
        Console.WriteLine("Je tretí štvrťrok.")
    Case 8
        Console.WriteLine("Je tretí štvrťrok.")
    Case 9
        Console.WriteLine("Je tretí štvrťrok.")
    Case 10
        Console.WriteLine("Je štvrtý štvrťrok.")
    Case 11
        Console.WriteLine("Je štvrtý štvrťrok.")
    Case 12
        Console.WriteLine("Je štvrtý štvrťrok.")
End Select

Príklad funguje spoľahlivo, problém však je, že sme si týmto zápisom moc nepomohli. Podobnému neustále sa opakujúci kódu by sme sa vždy mali vyhýbať.

Zlúčenie podmienok

Skúsme to ešte raz a využime možnosti zlúčenia podmienok, ktoré nám Select Case poskytuje. Možností je hneď niekoľko:

Dim mesic As Integer = 6
Select Case mesic
    Case 1, 2, 3    'výpočet hodnôt oddelených čiarkou
        Console.WriteLine("Je prvý štvrťrok.")
    Case 4 To 6 'interval od - do
        Console.WriteLine("Je druhý štvrťrok.")
    Case Is <= 9    'menšie alebo rovné hodnote
        Console.WriteLine("Je tretí štvrťrok.")
    Case Else   'zostávajúce
        Console.WriteLine("Je štvrtý štvrťrok.")
End Select

Ukážka výstupu aplikácie:

Konzolová aplikácia
Je druhý štvrťrok.

Tento zápis je už oveľa stručnejšia a prehľadnejšie! Konštrukcia Select Case nepodporuje tzv. Prepadávaniu. Čiže podmienka Is <= 9 pre hodnoty od 1 do 6 nebude vyhodnocovaná, keďže tieto hodnoty spracuje už prvý alebo druhý case a potom ich Select Case ukončený (akonáhle je niektorá podmienka splnená, ďalšie podmienky sa už nevyhodnocujú).

Štýly podmienok v Select Case možno aj kombinovať, napr. Pre kladné čísla, ktoré nie sú dvojciferné, by išlo napísať: Case 1, 2, 3, 4 To 9, Is > 99.

V budúcej lekcii, Cykly vo VB .NET druhýkrát - While, Do-Loop, Exit a Continue , na nás čaká ďalší syntaxe okolo cyklov, na ktorú môžeme naraziť v cudzích zdrojových kódoch.


 

Predchádzajúci článok
Riešené úlohy k 10. lekcii VB.NET
Všetky články v sekcii
Základné konštrukcie jazyka Visual Basic (VB .NET)
Preskočiť článok
(neodporúčame)
Cykly vo VB .NET druhýkrát - While, Do-Loop, Exit a Continue
Článok pre vás napísal Alesh
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Aktivity