Úvod do rubriky Visual Basic | Programátorská dílna | Ján Hanák | ||||||||||||||||||||||||
|
Visual Basic :: Pokračujeme s VB .NET 2003 |
|||||||||||||||||||||||||
|
Začátečník | Pokročilý | Expert | |||||||||||||||||||||||
|
![]() |
![]() |
||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||
Vážení čtenáři,
v dnešním díle seriálu Pokračujeme s VB .NET 2003 začneme s představováním rozhodovacích příkazů, které můžete najít v jazyce Visual Basic .NET 2003. Předmětem našeho snažení se stane především příkaz If...Then a jeho modifikace, a poté také příkaz Select Case. Naučíte se, jak provádět rozhodování v programu a vytvářet programové větve. Jelikož uvedené příkazy se používají v takřka každém životaschopném programu, jejich bezproblémové ovládnutí by mělo být samozřejmostí pro každého uživatele, který se hodlá vydat na dráhu profesionálního programátora. Přeji vám příjemné počtení.
Charakteristika programových rozhodnutí
Podobně jako ve skutečném životě, i ve světe softwaru je velmi důležité přijímat správná rozhodnutí ve správnou dobu. Tím, že se počítačový program dovede v jistých okamžicích správně rozhodnout, může do jisté míry simulovat chování samotného člověka. Aby se program mohl sám rozhodovat, je samozřejmě nutné jej předem naprogramovat pomocí rozhodovacích příkazů a příslušných programových konstrukcí. Rozhodovací příkazy pomáhají programu vtisknout jistou dávku inteligence, protože vhodně připravený program se poté nedostane do nesnází při dělení libovolného čísla nulou, či ve chvíli, kdy se uživatel snaží zapsat data do neexistujícího souboru. Visual Basic .NET 2003 nabízí dva základní rozhodovací příkazy: If...Then a Select Case. Podívejme se nejprve na příkaz If...Then a jeho modifikace.
Příkaz If...Then
Příkaz If...Then slouží na jednoduché testování podmínky a má následující generickou podobu:
If Podmínka Then Příkazy End If
Aby mohl příkaz If...Then náležitě pracovat, musí poznat podmínku, kterou má testovat. Touto podmínkou může být libovolný výraz, jehož hodnotu lze konvertovat do platných hodnot typu Boolean. Jelikož typ Boolean dovede pracovat pouze se dvěma hodnotami (True a False), je vždy možné zjistit, zdali je podmínka splněna (hodnota True) či nikoliv (hodnota False). Povězme, že podmínkou bude matematický výraz x<3. Pokud budeme předpokládat, že proměnná x je datového typu Byte, dojdeme k poznání, že podmínkový výraz bude pravdivý, tedy vyhodnocen na hodnotu True jenom tehdy, bude-li hodnota proměnné x z intervalu <0, 2>. Jestliže bude proměnná x ukrývat ve svých útrobách hodnotu 3, podmínka nebude splněna (3 není menší než 3). Podobně tomu bude i v případě, kdy bude hodnotou proměnné x jakékoliv jiné přirozené číslo (zápornou hodnotu do proměnné vzhledem k jejímu datovému typu nelze uložit). Příkaz If...Then tedy začíná svoji činnost testem podmínky nebo, chcete-li, podmínkového výrazu. Pokud je test úspěšný a podmínka je splněna (hodnota True), jsou vykonány všechny programové příkazy, které se nacházejí za klíčovým slovem Then. Za tímto návěstím se může nacházet jeden, dva nebo i více příkazů, případně se zde nemusí nacházet příkaz žádný. (Pokud je za klíčovým slovem Then uvedeno více příkazů, mluvíme o bloku příkazů). Po vykonání všech přítomných příkazů je zpracován příkaz End If, který označuje konec působnosti příkazu If...Then. Jakmile je příkaz End If podroben exekuci, činnost rozhodovacího příkazu If...Then končí a běh programu pokračuje řádkem, jenž se nachází za příkazem End If.
Tak se příkaz If...Then chová v případě splnění testované podmínky. Co se ovšem stane ve chvíli, kdy je testovaný výraz vyhodnocen na hodnotu False a podmínka není tudíž splněna? Je-li tomu tak, nejsou vykonány žádné programové příkazy v těle příkazu, nýbrž činnost příkazu je okamžitě ukončena a běh programu se přesouvá na řádek, jenž následuje za řádkem s příkazem End If.
Obr. 1: Algoritmus práce rozhodovacího příkazu If...Then
Pomocí příkazu If...Then můžeme kupříkladu testovat, zdali je v proměnné uložena nulová hodnota:
Dim intProměnná As Integer If intProměnná = 0 Then MessageBox.Show("Hodnota proměnné je nulová.", _ "Informace o hodnotě proměnné.", MessageBoxButtons.OK, _ MessageBoxIcon.Information) End If
Metoda Show třídy MessageBox zobrazí okno se zprávou, která bude říkat, že hodnota proměnné intProměnná je rovna nule. To není nic překvapujícího, protože proměnná je po své deklaraci automaticky inicializována nulovou hodnotou a jelikož jsme její hodnotu poté neměnili, bude v ní uložena právě nula. Je tedy zřejmé, že výraz intProměnná = 0 je pravdivý, přesněji řečeno je vyhodnocen na hodnotu True typu Boolean. Jak jsme si již řekli, když je podmínka splněna, jsou vykonány příkazy za návěstím Then. V naší ukázce tak dochází k zobrazení okna se zprávou. Povězme však, že proměnnou po její deklaraci inicializujeme nenulovou hodnotou:
Dim intProměnná As Integer = 10 If intProměnná = 0 Then MessageBox.Show("Hodnota proměnné je nulová.", _ "Informace o hodnotě proměnné.", MessageBoxButtons.OK, _ MessageBoxIcon.Information) End If
Co se stane nyní? Po pravdě řečeno, nestane se nic, a to doslova. Vzhledem k tomu, že proměnná intProměnná nyní obsahuje hodnotu 10, nebude testovaná podmínka splněna. Výsledkem práce operátoru pro přiřazení (=) bude hodnota False, což znamená, že testovaný výraz není pravdivý. Z tohoto důvodu nebude zobrazena žádná zpráva, neboť běh programu bude pokračovat příkazy, které jsou umístěny za řádkem s End If (v ukázce nejsou tyto příkazy uvedeny).
Příkaz If...Then...Else
Ačkoliv je možné použít příkaz If...Then v jeho základní podobě pro test podmínky a vykonání příkazů v případě úspěšné realizace tohoto testu, jaksi nám chybí možnost reagovat na skutečnost, kdy nebude testovaná podmínka splněna. Proto uvádíme modifikaci příkazu If...Then, ve které vystupuje klíčové slovo Else. Pak hovoříme o příkazu If...Then...Else, jenž má tuto všeobecnou podobu:
If Podmínka Then Příkazy Else Příkazy End If
Filozofie je docela jednoduchá: Není-li podmínka splněna, budou vykonány programové příkazy, které následují za návěstím Else.
Obr. 2: Algoritmus práce rozhodovacího příkazu If...Then...Else
Pomocí modifikované podoby příkazu If...Then tak můžeme uživatele obeznámit se skutečností, zdali se kýžený soubor nachází na jeho pevném disku či nikoliv.
Dim Soubor As String Soubor = "d:\ikona1.ico" If System.IO.File.Exists(Soubor) Then MessageBox.Show("Soubor se nachází na disku.") Else MessageBox.Show("Soubor se na disku nenachází.") End If
Když sdílené metodě Exists třídy File z jmenného prostoru System.IO předáme cestu k požadovanému souboru, metoda zjistí, zdali je tento soubor přítomen ve specifikované lokaci či nikoliv. Příjemné je, že metoda informuje program o výsledku své činnosti pomocí pravdivostních hodnot. Je-li soubor nalezen a identifikován, je vrácena hodnota True, v opačném případě pak hodnota False. Nejlepší ze všeho ovšem je, že návratovou hodnotu metody Exists můžeme bez jakýchkoliv potíží použít v rozhodovacím příkaze If...Then...Else. Pro uživatele bude zobrazen dialog se zprávou, z které se dozví informace o existenci požadovaného souboru.
Příkaz If...Then...ElseIf
Dobrá, pomocí příkazu If...Then...Else můžeme vytvářet dvě programové větvě, přičemž na jednu umístíme kód, jenž bude aktivován v případě splnění testované podmínky, a na druhou pak uložíme ty programové instrukce, které budou realizovány v opačném případě. Pro jednoduché testy je příkaz If...Then...Else vhodný, avšak po určitém čase přijdete na to, že je ve své podstatě poněkud omezující, nakolik vám dovoluje reagovat pouze na dva stavy testovaného výrazu. Úkoly v programování jsou však nezřídka mnohem složitější, a proto není divu, že existuje další modifikace příkazu If...Then, kterou můžeme pojmenovat jako If...Then...ElseIf. A jakáže je generická podoba tohoto příkazu?
If Podmínka1 Then Příkazy ElseIf Podmínka2 Then Příkazy End If
Jak si můžete všimnout, přídavkem je návěstí ElseIf, za kterým následuje další podmínka (Podmínka2), která je určená k testování. Příkaz If...Then...ElseIf je však poněkud komplikovanější, a proto se na jeho styl práce podíváme pod drobnohledem. Nuže, nejprve je testována hlavní podmínka příkazu, která je v našem ukázkovém modelu označená jako Podmínka1. Je-li tato podmínka splněna (vyhodnocena na hodnotu True), jsou vykonány příkazy, které následují za návěstím Then. Pokud je však výsledkem testování podmínkového výrazu hodnota False, hlavní podmínka není splněna. V tomto okamžiku se běh programu přesouvá na příkaz ElseIf a dochází k testování podmínky, která je spjata s tímto příkazem. Je-li Podmínka2 splněna, jsou provedeny příkazy, které stojí za příslušným klíčovým slovem Then. Jestliže ovšem Podmínka2 není splněna (hodnota False), program opouští rozhodovací příkaz a soustřeďuje se na exekuci dalších instrukcí.
Obr. 3: Algoritmus práce rozhodovacího příkazu If...Then...ElseIf
Podívejme se na praktickou aplikaci rozhodovacího příkazu If...Then...ElseIf:
Dim Generátor As New Random Dim Číslo As Short Číslo = CShort(Generátor.Next(Short.MinValue, Short.MaxValue)) If Číslo < 0 Then MessageBox.Show("Nalezené číslo je menší než nula." _ & vbCrLf & "Hodnota čísla: " & Číslo)mp; Číslo) ElseIf Číslo = 0 Then MessageBox.Show("Nalezené číslo je nula." _ & vbCrLf & "Hodnota čísla: " & Číslo)mp; Číslo) ElseIf Číslo > 0 Then MessageBox.Show("Nalezené číslo je větší než nula." _ & vbCrLf & "Hodnota čísla: " & Číslo)mp; Číslo) End If
Tento fragment zdrojového kódu provádí generování náhodných čísel pomocí metody Next instance třídy Random z jmenného prostoru System. Tato metoda náhodně vybírá číslo z intervalu <-32768, 32767-1>. Hraniční hodnoty intervalu se takřka kryjí s intervalem platných hodnot typu Short, až na to, že maximální hodnota je o jedničku menší. To znamená, že metoda Next může vrátit náhodné číslo o maximální velikosti 32766, ne 32767. Jelikož metoda Next vrací návratovou hodnotu typu Integer, musíme ji před jejím uložením do proměnné Číslo typu Short konvertovat pomocí konverzní funkce CShort. Požadavek na realizaci konverze je nutné uskutečnit především tehdy, pokud pracujete s aktivní volbou Option Strict. Je-li jednou vygenerované číslo uložené v příslušné proměnné, můžeme jej testovat pomocí rozhodovacího příkazu If...Then...ElseIf. Všimněte si, že můžeme použít více programových větví s návěstím ElseIf, ovšem za každým návěstím musí následovat platná testovací podmínka. V závislosti od charakteru nalezeného čísla bude zobrazeno okno se zprávou, ve které se dozvíte, zdali je číslo menší, větší nebo rovné nule. Kromě toho vám bude sdělena i skutečná hodnota čísla, abyste mohli celou činnost lépe zkontrolovat.
Rozhodovací příkaz If...Then je mezi programátory velice oblíbený. Tento fakt je ovlivněn mnoha faktory, mezi které můžeme zařadit třeba snadnost použití, flexibilitu a rychlost. Další podrobnosti kolem rozhodovacích příkazů si však ponecháme do příštího vydání rubriky Visual Basic.
|