NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
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:

Klikni pro editaci
  • 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)
    
    • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

    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:

    Klikni pro editaci
    • Dim muz As Boolean = True   'nějaká proměnná udávající pohlaví
      Dim nazevPohlavi As String = If(muz, "muž", "žena")
      Console.WriteLine(nazevPohlavi)
      
      • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

      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í:

      Klikni pro editaci
      • 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)
        
        • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

        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ě:

        Klikni pro editaci
        • 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
          
          • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

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

          Klikni pro editaci
          • 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
            
            • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

            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:

            Klikni pro editaci
            • 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
              
              • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

              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.


               

              Jak se ti líbí článek?
              Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
              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í:
              13 hlasů
              Aktivity