Veľkonočná akcia je tu a s ňou aj extra kredity ZADARMO na náš interaktívny e-learning. Dobij si teraz kredity a posuň sa vo svojej kariére vpred!
Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

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:

Klikni pre editáciu
  • 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)
    
    • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

    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:

    Klikni pre editáciu
    • Dim muz As Boolean = True   'nejaká premenná udávajúci pohlavia
      Dim nazevPohlavi As String = If(muz, "muž", "žena")
      Console.WriteLine(nazevPohlavi)
      
      • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

      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:

      Klikni pre editáciu
      • 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)
        
        • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

        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:

        Klikni pre editáciu
        • 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
          
          • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

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

          Klikni pre editáciu
          • 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
            
            • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

            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:

            Klikni pre editáciu
            • 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
              
              • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

              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.


               

              Ako sa ti páči článok?
              Pred uložením hodnotenia, popíš prosím autorovi, čo je zleZnakov 0 z 50-500
              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