Programujeme ve Visual Basic .NET - 6.díl - logické řídící příkazy

V tomto dílu seriálu o programovacím jazyku VB.NET se budeme věnovat logickým výrazům a základním příkazům pro větvení běhu programu.

Zpracování variant a větvení běhu programu

Až doposud naše ukázkové programy tvořila jednoduchá posloupnost příkazů, které se prováděly jeden za druhým. Výjimku tvořila konstrukce Try - Catch - End Try, která umožnila program větvit v závislosti na tom, zda při jeho provádění došlo k chybě, nebo ne. Velmi často ale potřebujeme provádět různý kód s ohledem na zcela obecnou podmínku.

V předchozím dílu seriálu jsme si sestavili jednoduchý program pro výpočet obvodu kruhu na základě vzorce obvod_kruhu = 2 ∙ π ∙ polomer_kruhu

Dejme tomu, že bychom například chtěli náš program upravit tak, aby dokázal spočítat vedle obvodu kruhu i obvod čtverce podle vzorce obvod_ctverce = 4 strana_ctverce.

Za tím cílem by se měl program nejprve uživatele dotázat, zda chce provádět výpočet obvodu čtverce, nebo obvodu kruhu. Pak bude uživatel vyzván k zadání příslušné vstupní hodnoty a zobrazen výsledek. Celý postup lze znázornit schematicky tzv. vývojovým diagramem, který znázorňuje strukturu programu:

Klepněte pro větší obrázek

Logická podmínka - výsledek dotazu (ve schématu znázorněná modrým kosočtvercem) větví běh programu na dvě části - pro výpočet obvodu kruhu (hnědě)  a obvodu čtverce (zeleně). Závěrečná část (zobrazená výsledků) je opět společná pro obě varianty.

Příkaz  If - Then - Else a jeho varianty

Pro větvení běhu programu prostředí VB.NET nabízí několik příkazů, které fungují podobně. Nejpoužívanějším příkazem je konstrukce If -Then -Else odvozená z anglických slov "Jestliže... - potom... - jinak..." a jeho použití se hodí především v případech, kdy potřebujeme podmíněně zpracovat jeden, nebo několik málo příkazů nebo se rozhodujeme mezi několika málo variantami (ty jsou dále znázorněny hnědou a zelenou barvou) na základě logické podmínky (znázorněné modře):

    If logický_výraz  Then nějaký_příkaz

V případě, že potřebujeme při splnění podmínky provést několik příkazů současně, příkazy se oddělují dvojtečkou. Obvykle se ale dává přednost víceřádkovému zápisu příkazu If...Then, protože je přehlednější. Dalšího zlepšení čitelnosti a přehlednosti kódu se dosáhne odsazením příkazů uvnitř podmínky, např.:

    If logický_výraz  Then  příkaz_1: příkaz_2: .... příkaz_N
odpovídá 
    If logický_výraz  Then
       příkaz_1
       příkaz_2
        ....
       příkaz_N
    End If     

Logickou podmínku obvykle tvoří logický výraz, nabývající pravdivostní hodnotu pravda (True) nebo nepravda (False). Hodnoty True / False jsou speciální konstanty jazyka VB.NET, interně je hodnota False reprezentovaná číslem 0 a True číslem -1. Ačkoliv lze namísto hodnot True / False používat čísla 0 a -1, z důvodu přehlednosti bychom měli vždy dávat přednost textovému zápisu těchto konstant.

Logický výraz je každý výraz, jehož pravdivostní hodnotu je VB.NET schopen vyhodnotit jako True, nebo False. VB.NET vyhodnocuje všechna čísla různá od nuly jako logickou hodnotu True. Velmi často tvoří logický výraz operace porovnání, využívající tzv. relační operátory < (menší než), > (větší než) a rovnítko = (operátor rovnosti) či kombinaci <> (operátor nerovnosti ≠), <= (menší nebo rovno ≤ ), >= (větší, nebo rovno ≥) . Textové řetězce v uvozovkách  se na rozdíl od čísel ve VB.NET místo velikosti porovnávají podle svého pořadí v abecedě (přesněji řečeno podle pořadí ASCII kódů jednotlivých znaků), takže platí že "aaa" > "aa", nebo "24" < "6". VB.NET umožňuje porovnávat i číslo a řetězec vzájemně - v tom případě se nejprve pokusí převést řetězec na číslo, pokud to není možné, pak obě hodnoty porovnává jako řetězec.

Např. hodláme-li do systémové konzole vypsat hodnotu proměnné n pouze tehdy, pokud je tato hodnota větší, než nula, zapíšeme tuto podmínku jednoduše takto :   

.....
If n > 0 Then System.Console.Write(n)
.....

V situaci, kdy potřebujeme provést při splnění podmínky podmínky určitý příkaz (nebo více příkazů) a při jejím nesplnění jiný příkaz / příkazy, doplňujeme příkaz podmínky  If ...Then klíčovým slovem Else (větvení programu) a podmínku zapíšeme následovně:

    If podmínka Then
       příkaz_1
       příkaz_2
      Else
       příkaz_3
    End If     

Při menším počtu příkazů lze podmínku If - Then zapsat i na jediný řádek, potom není nutné používat příkaz End If. Obecně se to však nedoporučuje, protože takto zapsaná podmínka je méně přehlednější, pokud jsou použité příkazy delší a prodlužují neúměrně řádek. Namísto oddělovače příkazů se přitom opět používá dvojtečka:

    If podmínka Then příkaz_1: příkaz_2 Else příkaz_3

Poznámka: Pokud uvnitř bloku podmínky nedochází k dalšímu větvení, jsou oba předchozí příklady ekvivalentní zápisu uvedenému níže:

    If podmínka Then
       příkaz_1
       příkaz_2
    End If
    příkaz_3

Upravíme-li náš původní program s využitím konstrukce If - Then -Else, můžeme získat podobný zápis. Vidíme, že klíčová část program je v duchu vývojového diagramu konstrukcí If - Then -Else rozdělena do dvou bloků - pro výpočet obvodu kruhu (hnědý) a čtverce (zelený). V praxi se zvýšení přehlednosti programu dosahuje odsazováním jednotlivých bloků kódu :

Module modMain
  Sub Main
    Dim polomer, strana, obvod
    System.Console.WriteLine("Přejete si spočítat obvod kruhu (0) nebo čtverce (1) ?")
    If System.Console.ReadLine() = 0 Then
        System.Console.WriteLine("Nyní prosím zadejte hodnotu poloměru [cm]")
        Dim polomer = System.Console.ReadLine()
        Dim obvod = 2 * System.Math.Pi * polomer
      Else
        System.Console.WriteLine("Nyní prosím zadejte délku strany [cm]")
        Dim strana = System.Console.ReadLine()
        Dim obvod = 4 * strana
    End If
    System.Console.WriteLine("Obvod [cm]:")
    System.Console.WriteLine(obvod)
   End Sub
End Module

Námět pro samostatnou práci

Z výše uvedené ukázky byla kvůle úspoře místa a lepší názornosti vypuštěna kontrola chyb konstrukcemi Try - Catch - zkuste jimi doplnit kompletní program ! Přiom budete možná řešit problém, zda konstrukci Try - Catch ošetřovat chyby v každé z větví programu samostatně, nebo ji aplikovat na celá blok příkazů If - Then - Else. Praktická zasada je obykle taková, že konstrukce pro ošetřování chyb by měla zahrnovat co nejmenší počet příkazů, mají-li být vyjímky zpracovány co možná konkrétně a adresně v duchu pravidla "jedna chyba na jeden blok Try - Catch". Ladění kódu v bloku Try - Catch, ve kterém dochází k několika chybám současně může být velice nepohodlné a nepřehledné.

Stručné shrnutí

Pro větvení běhu programu na základě hodnoty logického výrazu lze použít příkaz podmínky If..Then..Else, vyhodnocujícího hodnotu logického výrazu, která může nabývat dvou pravdivostních hodnot True (-1) nebo False (0). K porovnávání výrazů lze využít relační operátory <, >, =, <>, <=, >=.VB.NET umožňuje vzájemně porovnávat čísla i řetězce, přičemž řetězce porovnává podle jejich pořadí v abecedě. Příkaz Imports umožňuje vypustit z kódu opakující se části příkazů, které jsou uvedeny v příkazu Imports.

V příštím dílu seriálu se seznámíme s logickými příkazy pro větvení běhu programu mezi větším počtem variant.

Diskuze (57) Další článek: Iomega propustí čtvrtinu zaměstnanců

Témata článku: Software, Programování, Vývojový diagram, O Kruhu, Příkaz, Elsa, Textový řetězec, Jediný řádek, Jednoduchý vzorec, Visual, Log, Pros, Pre, Hnědo, Blok, Jednoduchá konstrukce, Závěrečná část, Jednotlivý blok, Klíčová část, Nepravda, Catch


Určitě si přečtěte

Jak sestavit rodokmen. Z informací, které jsou na internetu

Jak sestavit rodokmen. Z informací, které jsou na internetu

Podrobný návod, jak hledat ve starých matrikách informace o předcích a nemuset při tom ani vstát od počítače. Základy internetové genealogie.

Marek Lutonský | 59

Internet poslední naděje. Kdo má nejlepší tarif „LTE na doma“?

Internet poslední naděje. Kdo má nejlepší tarif „LTE na doma“?

** Srovnali jsme fixní LTE připojení od tuzemských operátorů ** Liší se rychlostmi, cenou i podmínkami ** Na co všechno dát pozor?

Lukáš Václavík | 31

Google mapy, Seznam mapy, Apple mapy... Velké srovnání šesti internetových map. Kdo to dělá nejlépe?

Google mapy, Seznam mapy, Apple mapy... Velké srovnání šesti internetových map. Kdo to dělá nejlépe?

** Která klasická webová mapa se vám líbí nejvíce? ** Srovnali jsme šest velkých služeb v několika situacích ** Hlasujte v anketě

Jakub Čížek | 78

DeOldify: Téměř zázračná technologie, která obarvuje 2. světovou válku, nebo vaše fotky z dětství

DeOldify: Téměř zázračná technologie, která obarvuje 2. světovou válku, nebo vaše fotky z dětství

** Neuronová síť DeOldify obarvuje fotky ** Můžete si ji vyzkoušet sami i bez superpočítače ** YouTube je plný obarvených ikonických videí

Jakub Čížek | 20


Aktuální číslo časopisu Computer

Megatest mobilů do 8 000 Kč

Test bezdrátových headsetů

Linux i pro začátečníky

Jak surfovat anonymně