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:
{VBNET_CONSOLE}
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)
{/VBNET_CONSOLE}
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:
{VBNET_CONSOLE}
Dim muz As Boolean = True 'nejaká premenná udávajúci pohlavia
Dim nazevPohlavi As String = If(muz, "muž", "žena")
Console.WriteLine(nazevPohlavi)
{/VBNET_CONSOLE}
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:
{VBNET_CONSOLE}
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)
{/VBNET_CONSOLE}
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:
{VBNET_CONSOLE}
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
{/VBNET_CONSOLE}
Ako ale použiť Select Case
pre takýto príklad? Možno by
vás napadol nasledujúce zápis:
{VBNET_CONSOLE}
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
{/VBNET_CONSOLE}
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:
{VBNET_CONSOLE}
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
{/VBNET_CONSOLE}
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.