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 |
Grafická
interpretace generické práce logického operátoru AndAlso |
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? |
|
OOP a Visual Basic .NET (1. díl) |
||