Integrované prostředí rubriky Visual Basic

Autor: Ján Hanák

Začínáme s VB .NET

Úvod do světa .NET (13. díl)

Časová náročnost

(min):

45

Začátečník

Pokročilý

Profesionál

Použitý operační systém : Hlavní vývojový nástroj :

Další vývojový software :

Jiný software :

Windows 2000 SP4

Visual Basic .NET 2003

Žádný

Žádný

 

 

Milí programátoři ve Visual Basicu .NET,

 

třináctý díl našeho seriálu pro začátečníky se bude dále nést v duchu logických operátorů. V dnešní části se seznámíte s novými logickými operátory, které nabízí Visual Basic .NET. Jde o operátory AndAlso a OrElse. Pochopíte, jak oba logické operátory pracují a proč je jich použití výhodné z výkonového hlediska. Přeji vám příjemné počtení.

 

Obsah

Logický operátor AndAlso

Grafická interpretace generické práce logického operátoru AndAlso

Logický operátor OrElse

Grafická interpretace generické práce logického operátoru OrElse

 

 

Logický operátor AndAlso

 

Speciální operátor AndAlso byl uveden až ve verzi .NET Visual Basicu, takže programátoři, kteří pracovali s předcházejícími verzemi tohoto programovacího nástroje se s tímto operátorem ještě nesetkali. Operátor AndAlso je tzv. zkracujícím operátorem, protože v jistých situacích umožňuje rychleji vyhodnotit porovnání svých logických operandů a tím dosáhnout výkonnostního navýšení (toto navýšení je citelné zejména při vyhodnocování komplikovaných logických výrazů). A jak vlastně operátor AndAlso pracuje? Takřka stejně, jako jeho kolega operátor And, ovšem s jedním podstatným rozdílem. Pokud je totiž již první operand vyhodnocen na pravdivostní hodnotu False, není pravdivostní hodnota druhého operandu vůbec vypočtena. Styl práce operátoru AndAlso je zcela pochopitelný: Pokud je totiž již první operand vyhodnocen na hodnotu False, není jednoduše možné, aby byla výsledkem celé operace pravdivostní hodnota True (logická konjunkce tuto možnost nepřipouští). Bude-li hodnota prvního operandu rovna False, nebude prozkoumán druhý, resp. další operátor, ale ihned bude vrácena finální pravdivostní hodnota False. Tím pádem získáváme dodatečný výkon, který můžeme optimálně využít třeba na provádění jiných partií programového kódu.  

 

Tab. 1 předvádíme styl práce logického operátoru AndAlso na dvou operandech (X a Y).

 

Logický operátor

Operand1

Operand2

Použití logického operátoru

Je vyhodnocen druhý operand?

Finální pravdivostní hodnota

AndAlso

X = True

Y = True

X AndAlso Y

Ano

True

X = True

Y = False

Ano

False

X = False

Y = True

Ne

False

X = False

Y = False

Ne

False

 

Tab. 1 – Ilustrace použití operátoru AndAlso na dvou operandech X a Y

 

Grafickou interpretaci generické práce logického operátoru AndAlso a dvou operandů můžete vidět na obr. 1.

 

 

Obr. 1 – Grafická interpretace generické práce logického operátoru AndAlso

 

Nyní se podívejme na práci operátoru AndAlso ve zdrojovém kódu:

 

Ukázka č. 1:

 

    Private Sub Button1_Click(ByVal sender As System.Object, _

    ByVal e As System.EventArgs) Handles Button1.Click

        Dim a As Boolean = True

        Dim b As Boolean = False

        Me.Text = CType(a AndAlso b, String)

    End Sub

 

Výpis kódu pracuje s dvěma proměnnými (a, b) typu Boolean. Zatímco proměnná a je explicitně inicializována pravdivostní hodnotou True, do proměnné b je uložena pravdivostní hodnota False. V tomto případě operátor AndAlso nerealizuje zkrácené vyhodnocování. Důvodem je skutečnost, že pravdivostní hodnota operandu a je True. Je proto zapotřebí probádat i operand b, ovšem jelikož je hodnota tohoto operandu False, bude operátorem AndAlso vrácena rovněž hodnota False. Booleovská hodnota bude přetypována do podoby textového řetězce, který bude posléze zobrazen v titulkovém pruhu dialogového okna aktivní instance třídy formuláře. 

 

Ukázka č. 2:

 

    Private Sub Button2_Click(ByVal sender As System.Object, _

    ByVal e As System.EventArgs) Handles Button2.Click

        Dim InstanceRandom As New Random

        Dim NáhodnéČíslo As Short

        Dim DruháOdmocninaČísla As Double

        NáhodnéČíslo = CType(InstanceRandom.Next(1, 100), Short)

        DruháOdmocninaČísla = Math.Sqrt(NáhodnéČíslo)

 

        If NáhodnéČíslo >= 50 AndAlso DruháOdmocninaČísla > 5 Then

            MessageBox.Show("Hodnota vygenerovaného čísla: " & _

            NáhodnéČíslo & vbCrLf & "Druhá odmocnina vygenerovaného čísla: " & _

            Format(DruháOdmocninaČísla, "0.000") & vbCrLf & _

            "Vygenerované číslo vyhovuje stanoveným požadavkům.", _

            "Informační zpráva", MessageBoxButtons.OK, _

            MessageBoxIcon.Information)

        Else

            MessageBox.Show("Hodnota vygenerovaného čísla: " & _

            NáhodnéČíslo & vbCrLf & "Druhá odmocnina vygenerovaného čísla: " & _

            Format(DruháOdmocninaČísla, "0.000") & vbCrLf & _

            "Vygenerované číslo nevyhovuje stanoveným požadavkům.", _

            "Informační zpráva", MessageBoxButtons.OK, _

             MessageBoxIcon.Exclamation)

        End If

    End Sub

 

Ačkoliv je struktura tohoto programového kódu malinko složitější, není ani zdaleka komplikovaná. Posuďte sami: Nejprve vytváříme novou instanci třídy Random a referenci na tuto instanci ukládáme do odkazové proměnné InstanceRandom. Třída Random se nachází v jmenném prostoru System a slouží pro rychlý a flexibilní výpočet náhodně generovaných čísel (mimochodem, žádné náhodné číslo není „skutečně“ náhodné, ovšem jako náhodné může působit z pohledu statistické teorie). Abychom provedli generování náhodného čísla, použijeme metodu Next vytvořené instance třídy Random. Metoda Next je přetížená a uvedený programový kód používá právě jednu přetíženou variantu metody, která pracuje se dvěma parametry typu Integer. Tyto parametry specifikují minimální a maximální celočíselní hodnoty, které určují číselný interval, z něhož bude generováno náhodné číslo. V našem případě má tento interval podobu uzavřeného intervalu čísel 1 až 100. Pokud metoda Next „najde“ kýžené číslo, vrátí jej ve formě 32bitového celého čísla. Návratovou hodnotu metody Next explicitně přetypujeme (pomocí konverzní funkce CType) do podoby datového typu Short. Tuto konvertovanou hodnotu posléze použijeme pro vypočtení druhé odmocniny získané numerické hodnoty, přičemž vypočtenou druhou odmocninu uložíme do hodnotové proměnné DruháOdmocninaČísla. Operátor AndAlso provádí logickou konjunkci dvou operandů, které jsou reprezentovány proměnnými NáhodnéČíslo a DruháOdmocninaČísla. Pokud operátor AndAlso zjistí, že hodnota proměnné NáhodnéČíslo je větší nebo rovna než 50, bude vyhodnocovat také pravdivostní hodnotu druhého operandu. Jestliže ale bude proměnná NáhodnéČíslo obsahovat hodnotu menší než 50, nebude se operátor AndAlso zatěžovat s testováním proměnné DruháOdmocninaČísla. V tomto případě bude operátorem vrácená finální pravdivostní hodnota False, a bude tedy proveden ten programový kód, jenž se nachází za klíčovým slovem Else rozhodovací konstrukce If-Then.  

 

 

Logický operátor OrElse

 

Logický operátor OrElse, byl podobně jako jeho kolega operátor AndAlso, uveden až ve Visual Basicu .NET, a proto je zcela jistě žhavým kandidátem pro bližší studium. Charakter obou operátorů je stejný, ovšem zatímco operátor AndAlso uskutečňuje logickou konjunkci, operátoru OrElse „jde“ lépe realizace logická disjunkce. Pokud předpokládáme, že budeme pracovat jenom se dvěma operandy, mohli bychom způsob práce operátoru OrElse definovat asi takto: Pokud je operátorem OrElse vyhodnocena pravdivostní hodnota prvního operandu na True, již nebude zkoumán druhý operátor, ale okamžitě bude vrácena finální pravdivostní hodnota True. Naopak, jestliže z testu prvního operátoru vzejde pravdivostní hodnota False, bude prozkoumán také druhý operátor a výslední finální hodnota bude záviset právě na jeho pravdivostní hodnotě. Z příkladu jasně vyplývá, že také logický operátor OrElse je typický zkráceným vyhodnocováním hodnot logických operandů a výrazů. Pro lepší ilustraci použití operátoru OrElse si prohlédněte tab. 2.

 

Logický operátor

Operand1

Operand2

Použití logického operátoru

Je vyhodnocen druhý operand?

Finální pravdivostní hodnota

OrElse

X = True

Y = True

X OrElse Y

Ne

True

X = True

Y = False

Ne

True

X = False

Y = True

Ano

True

X = False

Y = False

Ano

False

 

Tab. 2 – Ukázka použití logického operátoru OrElse na dvou operandech X a Y

 

Grafickou interpretaci generické práce logického operátoru OrElse a dvou operandů můžete vidět na obr. 2.

 

 

Obr. 2 - Grafická interpretace generické práce logického operátoru OrElse

 

Pokud již netrpělivě čekáte na programové aplikace operátoru OrElse, zde jsou:

 

Ukázka č. 1

 

    Private Sub Button3_Click(ByVal sender As System.Object, _

    ByVal e As System.EventArgs) Handles Button3.Click

        Dim c, d As Boolean

        c = True

        d = False

        Me.Text = CType(c OrElse d, String)

    End Sub

 

Pokud umístíte tento fragment programového kódu do zpracovatele události Click tlačítka, spustíte aplikaci a klepněte na tlačítko, v titulkovém pruhu formuláře se objeví textový řetězec True. Proč? Jelikož v proměnné c je uložena pravdivostní hodnota True, nebude operátor OrElse zjišťovat také pravdivostní hodnotu proměnné d (proměnná d může obsahovat již jakoukoliv hodnotu, finální podobu výsledku operace logické disjunkce již změnit nemůže). Tento příklad je tedy typickou ukázkou zkráceného vyhodnocování operandů, čímž se ušetří jistý výkon procesoru, který může být vynaložen prospěšnějším způsobem.

 

Ukázka č. 2:

 

    Private Sub Button3_Click(ByVal sender As System.Object, _

    ByVal e As System.EventArgs) Handles Button3.Click

        'Deklarace proměnné VelikostSouboruAplikace typu Integer.

        Dim VelikostSouboruAplikace As Integer

 

        'Použití funkce FileLen, která zjistí velikost souboru aplikace

        'v bajtech. Abychom vypočítali velikost souboru v KB, vydělíme

        'hodnotu v bajtech číslem 1024 a výslední hodnotu přetypujeme

        'pomocí konverzní funkce CInt (ekvivalentně můžeme rovněž použít

        'operátor pro celočíselné dělení).

        VelikostSouboruAplikace = _

        CInt((FileLen(Application.ExecutablePath)) / 1024)

 

        'Jestliže je velikost souboru aplikace větší než 10 KB,

        'bude zobrazeno dialogové okno se zprávou.

        If VelikostSouboruAplikace >= 10 OrElse False Then

            'Prostřednictvím metody Show třídy MessageBox zobrazíme

            'dialogové okno se zprávou o velikosti souboru aplikace.

            MessageBox.Show("Velikost souboru je " & VelikostSouboruAplikace & _

            " KB.", "Zpráva o velikosti souboru", MessageBoxButtons.OK, _

            MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)

        End If

    End Sub

 

Výsledek práce uvedeného zdrojového kódu přináší obr. 3.

 

 

Obr. 3 – Použití operátoru OrElse

 

 

Právě jste dočetli 13. díl seriálu Začínáme s VB .NET. 

 

Jestliže se chcete dozvědět více informací o programování ve Visual Basicu .NET, neváhejte a navštivte také další sekce rubriky Visual Basic. A jakáže je dnešní nabídka?

Téma měsíce

OOP a Visual Basic .NET (1. díl)

Programátorská laboratoř

Generování chybových výjimek

Vytváření formulářů libovolných tvarů

Ovládací prvek ProgressBar