Integrované prostředí rubriky Visual Basic |
Autor: Ján Hanák |
||||||||
|
Začínáme s VB
.NET |
||||||||
Úvod do světa .NET (11. 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 SP3 Visual Basic .NET
2002 Žádný Žádný |
|||||||
|
Nepřehlédněte exkluzivní
Speciál pro programátory, který pojednává o jazykové interoperabilitě mezi
jazyky Managed Extensions for C++ a Visual Basic .NET. |
||||||||
|
Vážení čtenáři,
v jedenácté lekci budeme pokračovat v problematice použití operátorů ve Visual Basicu .NET. Nejprve si představíme klasifikaci operátorů v přehledné formě, abyste získali základní přehled o všech kategoriích operátorů, s nimiž se můžete v nové verzi programovacího jazyka setkat. Poté přejdeme na bližší výklad aritmetických a porovnávacích operátorů. Přeji vám příjemné počtení.
Obsah |
Pro zvídavé programátory: Použití operátoru \ při
centrování formuláře |
Pro zvídavé programátory: Generování náhodných
čísel pod drobnohledem |
Klasifikace operátorů
Visual Basic .NET obsahuje značné množství operátorů, které můžete použít při různých příležitostech. Abyste měli ihned ze začátku základní přehled o operátorech, rozdělíme si je na několik homogenních skupin (tab. 1).
Kategorie operátorů |
Charakteristika |
Aritmetické operátory |
Mezi aritmetické
operátory patří tyto: ·
operátor
pro sčítaní (+) ·
operátor
pro odčítaní (-) ·
operátor
pro násobení (*) ·
operátor
pro dělení (/) ·
operátor
pro celočíselné dělení (\) ·
operátor
zbytku po dělení (Mod) ·
operátor
pro umocňování (^) Aritmetické
operátory se používají při běžných matematických operacích s celými
čísly, nebo s čísly s desetinnou částí. |
Porovnávací operátory |
Porovnávací
operátory se využívají při porovnávání hodnot dvou, nebo i více výrazů. Mezi
porovnávací operátory zařazujeme tyto: ·
operátor
rovnosti (=) ·
operátor
nerovnosti (<>) ·
operátor menší než (<) ·
operátor větší než (>) ·
operátor menší nebo rovno (<=) ·
operátor větší nebo rovno (>=) ·
operátor
Is ·
operátor
Like |
Přiřazovací operátory |
Skupina
přiřazovacích operátorů se ve Visual Basicu .NET značně rozrostla
v důsledku zavedení tzv. zkrácených tvarů operátorů. Do této kategorie
patří následující operátory: ·
operátor
přiřazení (=) ·
zkrácený
operátor pro sčítaní a přiřazení (+=) ·
zkrácený
operátor pro odečítaní a přiřazení (-=) ·
zkrácený
operátor pro násobení a přiřazení (*=) ·
zkrácený
operátor pro dělení a přiřazení (/=) ·
zkrácený
operátor pro celočíselné dělení a přiřazení (\=) ·
zkrácený
operátor pro umocňování a přiřazení (^=) ·
zkrácený
operátor pro zřetězení a přiřazení (&=) |
Logické operátory |
Logické operátory se
vkládají do logických výrazů, přičemž pomocí operátorů lze získat
pravdivostní hodnotu daného logického výrazu. Tato pravdivostní hodnota může
posléze posloužit pro řízení jiných programových konstrukcí (např.
rozhodovací konstrukce If či cyklů). Mezi logické operátory patří
tyto: ·
operátor
And ·
operátor
AndAlso ·
operátor
Or ·
operátor
OrElse ·
operátor
Not ·
operátor
Xor |
Operátory pro zřetězení |
Operátory této
kategorie se uplatňují při zřetězení dvou, nebo i několika operandů (tyto
operandy mohou být řetězcového typu (String), nebo i jiného typu).
Mezi operátory pro zřetězení patří: ·
operátor
pro zřetězení (&) ·
operátor
pro zřetězení (+) |
Bitové operátory |
Bitové operátory se
používají při provádění operací nad jednotlivými bity hodnot celočíselných
datových typů. Do skupiny bitových operátorů patří následující zástupci: ·
bitový
operátor And ·
bitový
operátor Or ·
bitový
operátor Not ·
bitový
operátor Xor Jak si můžete
všimnout, bitové operátory mají stejné názvy jako některé logické operátory. Ve
skutečnosti ovšem existuje pouze jedna verze těchto operátorů, ovšem způsob
práce operátorů je determinován na základě typu dodaných operandů. Operátorům,
kterých činnost závisí od určitého kontextu (v tomto případě od typu
operandů) se říká přetížené operátory. Přetížené operátory jsou užitečnou
programovací technikou, protože operátory „vědí“, co mají provést se svými
operandy. |
Speciální operátory |
Visual Basic .NET má
v rukávu rovněž dvě esa, kterými jsou dva speciální operátory: ·
operátor
AddressOf ·
operátor
GetType Operátor AddressOf
umožňuje přístup k runtime adrese procedury nebo funkce. Operátor AddressOf
se používá např. při tvorbě delegátů, nebo při programování vícevláknových
aplikací. Operátor GetType
vrací typ vstupního objektu. |
Aritmetické operátory
Aritmetické operátory můžete použít, kdykoliv budete potřebovat realizovat jistou aritmetickou operaci. Pravděpodobně nejčastěji se budete setkávat se základními aritmetickými operátory, mezi které patří operátory pro sčítaní, odčítání, násobení a dělení. Všechny tyto operátory pracují tak, jak byste čekali: Vezmou hodnoty svých operandů a provedou příslušnou matematickou operaci. Zde můžete vidět několik příkladů:
Dim
a, b, c, d As Integer
a = 11 + 88
b = 111 - 55
c = b * 10
d = CInt(c
/ 3)
Me.Text
= "a=" & a & " b=" & b & " c="
& c & " d=" & d
V uvedeném fragmentu zdrojového kódu se střetáváme s proměnnými a, b, c a d datového typu Integer. V dalších krocích jsou proměnné inicializované vypočtenými hodnotami. Tyto hodnoty představují výsledek práce aritmetických operátorů. Kdybyste tento kód umístili do událostní procedury Click tlačítka a spustili byste projekt, v titulkovém pruhu aktuální instance formuláře by se objevili pozměněné hodnoty použitých proměnných: a=99, b=56, c=560 a d=187. I když jsou výsledné hodnoty proměnných a, b a c vskutku pochopitelné, jisté pochybnosti byste mohli mít u proměnné d. Hodnota proměnné d je totiž 187, a to i přesto, že podíl čísel 560 a 3 je 186,6667. Jak je to možné? Tato skutečnost je způsobena použitím konverzní funkce CInt, která převede návratovou hodnotu operátoru pro dělení do podoby celého čísla. Připomínám, že konverzní funkci CInt je nutné použít v případě, kdy pracujete s aktivovanou volbou Option Strict On. Když operátor / dokončí svou práci, vrací zvyčejně výslední hodnotu v podobě desetinného čísla s dvojitou přesností (datový typ Double). Návratovou hodnotu operátoru převezme konverzní funkce CInt, která přetypuje předanou hodnotu na hodnotu datového typu Integer. Jelikož hodnoty typu Integer nemohou uchovávat desetinnou část čísla, je číslo zaokrouhleno. Tedy z přesné hodnoty 186,6667 se stane hodnota 187.
|
Pokud při programování nepoužíváte volbu Option Strict On,
nemusíte konverzní funkci CInt volat explicitně. Visual Basic převede
přetypování implicitně, ovšem výsledná hodnota uložená v proměnné d
bude stejná (187). |
Budete-li chtít získat přesnou hodnotu podílu, můžete použít tento programový kód:
Dim a,
b, c As Integer
Dim d As Double
a = 11 + 88
b = 111 - 55
c = b * 10
d = c / 3
Me.Text
= "a=" & a & " b=" & b & " c="
& c & " d=" & d
Zcela jistě zajímavé bude použití operátoru pro celočíselné dělení (\):
Dim x As Short = 100
Dim y As Short = 26
Me.Text
= "Výsledek celočíselného dělení je " & x \ y
Operátor pro celočíselné dělení (\) vydělí hodnotu levého operandu hodnotou pravého operandu a vrátí podíl v podobě celočíselní hodnoty (v našem případě jde o hodnotu 3). Jelikož po „zavolání“ operátoru obdržíme celočíselnou hodnotu, není zapotřebí použít žádnou konverzní funkci. Kromě toho, celočíselné dělení je výpočetně méně náročné jako přesné dělení, při kterém je výsledkem číslo s pohyblivou desetinnou čárkou.
|
Správné použití operátoru pro celočíselné dělení může v jistých
situacích znatelně ovlivnit rychlost vykonávání programového kódu.
Nepotřebujete-li přílišnou přesnost, dalo by se říci, že operátor \ je
pro vás „to pravé“. |
|
Mnozí programátoři operátor pro celočíselné dělení neznají. Když jej
proto použijete ve vhodné chvíli, můžete ukázat, jak znalí programátoři jste.
Jestliže se budete ucházet o místo programátora ve Visual Basicu a ukážete
znalost operátoru pro celočíselné dělení, vaše hodnota v očích vašeho
budoucího zaměstnavatele zcela jistě stoupne. Z tohoto pohledu lze
použití operátoru \ přirovnat pomyslné třešničce na dortu. |
|
Pro zvídavé programátory: Použití
operátoru \ při centrování formuláře |
Formulář (instance třídy Form1) lze umístit do středu obrazovky
pomocí následujících řádků zdrojového kódu: Me.Top
= (Screen.PrimaryScreen.Bounds.Height - Me.Height)
\ 2 Me.Left
= (Screen.PrimaryScreen.Bounds.Width - Me.Width)
\ 2 Při centrování
formuláře použijeme třídu Screen. Třída Screen však nedisponuje
veřejným konstruktorem, a proto nelze přímo vytvořit její instanci. Instance
třídy Screen se vytvoří v okamžiku, kdy zavoláme veřejné metody
nebo vlastnosti této třídy. V našem případě voláme vlastnost PrimaryScreen,
která vrátí instanci třídy Screen. Vlastnost PrimaryScreen je
sdílená (shared) a určena jenom pro čtení (readonly). Když
zavoláme vlastnost PrimaryScreen, zjistíme primární zobrazovací
jednotku (pokud počítač disponuje pouze jednou zobrazovací jednotkou, je
vrácena tato, v opačném případě je vrácena ta zobrazovací jednotka,
která je nakonfigurována jako hlavní). Dále voláme vlastnost Bounds, která
vrátí instanci třídy Rectangle (také
vlastnost Bounds je určena jenom pro čtení). Tato instance
představuje obdélníkový region, jenž reprezentuje viditelnou plochu primární
zobrazovací jednotky. Výšku, resp. šířku obdélníkového regionu získáme prostřednictvím
vlastností Height a Width. Aby byl formulář vystředěn, je nutné
od výšky, resp. šířky obdélníkového regionu odečíst výšku, resp. šířku
formuláře a následně získané hodnoty vydělit dvěmi pomocí operátoru pro
celočíselné dělení (\). Předpokládejme, že
používáte 17palcový monitor s rozlišením 1024x768 obrazových bodů.
Spustíte-li uvedený kód, bude vlastnost Top formuláře rovna hodnotě
234 a vlastnost Left zase hodnotě 362. Při tomto výpočtu vycházíme ze
skutečnosti, že rozměry formuláře mají implicitní velikost 300x300 obrazových
bodů (viz obrázek). |
Budete-li chtít získat zbytek po dělení, použijte operátor Mod. Kupříkladu následující kód vytiskne do titulku okna hlášení „Zbytek po dělení je 3“:
Dim m,
n As Byte
m = 23
n
= 4
Me.Text
= "Zbytek po dělení je " & m Mod
n
Podívejme se, proč je tomu tak. Algoritmus práce operátoru Mod probíhá přibližně v těchto krocích:
Aby byl náš výklad aritmetických operátorů úplný, ukažme si ještě příklad operátoru pro umocňování:
Dim k As Integer = 2, l As Integer = 8
Me.Text
= CStr(k ^ l)
Všeobecní forma použití operátoru pro umocňování je:
Číselná hodnota ^
exponent
V našem případě je vypočtena osmá mocnina čísla 2, která je rovna hodnotě 256. Operátor ^ před samotným výpočtem převede všechny operandy do datového typu Double a na takto upravených operandech je posléze provedena operace umocnění. Návratová hodnota operandu je opět datového typu Double, takže používáte-li volbu Option Strict On, budete muset v případě potřeby uskutečnit explicitní přetypování získané hodnoty.
Exponentem přitom může být jakýkoliv numerický výraz:
Dim k As Integer = 2, l As Integer = 8
Me.Text
= CStr(k ^ (l * 2 - 6))
Tento programový kód vypočítá desátou mocninu čísla 2, což je 1024.
Porovnávací operátory
Porovnávací operátory porovnávají výrazy nebo části výrazů a na základě výsledků porovnání vracejí jistou pravdivostní hodnotu (buď hodnotu True nebo False). Více informací nabízí tab. 2.
Porovnávací operátor |
Operandy |
Výsledkem je pravdivostní hodnota True |
Výsledkem je pravdivostní hodnota False |
|
Operátor
rovnosti (=) |
a, b |
a = b |
a <> b |
|
Operátor nerovnosti (<>) |
a, b |
a <> b |
a = b |
|
Operátor
menší než (<) |
a, b |
a < b |
a >= b |
|
Operátor
větší než (>) |
a, b |
a > b |
a <= b |
|
Operátor menší nebo rovno (<=) |
a, b |
a <= b |
a > b |
|
Operátor větší nebo rovno (>=) |
a, b |
a >= b |
a < b |
|
Ukázku použití porovnávacích operátorů přináší další fragment zdrojového kódu:
Dim q,
v As Short
Randomize()
q = CShort(Int((10
* Rnd()) + 1))
If q
>= 1 And q <= 5 Then
For
v = 1 To q
Debug.WriteLine("Bylo
vygenerováno číslo " & q)
Next
v
End If
V tomto kódu jsou deklarované dvě proměnné (q, v) datového typu Short. Příkaz Randomize inicializuje generátor náhodných čísel, čili je patrné, že se budeme pokoušet o získání náhodných čísel z jistého číselného intervalu. Tento interval je tvořen čísly 1 až 10, přičemž pro vygenerování náhodných čísel používáme funkci Rnd. Funkce Rnd je v našem případě vnořena do funkce Int (pokud byste se chtěli dozvědět o generování náhodných čísel více, nepřehlédněte ostrůvek pro zvídavé programátory dále v tomto textu). Získané náhodné číslo je přetypováno do datového typu Short a přiřazeno do proměnné q. Pokud hodnota proměnné q z intervalu <1,5> je aktivován cyklus For-Next, který do okna Output vypíše uvedenou zprávu (zpráva bude vypsaná n-krát, kde n je obdržené náhodné číslo z intervalu <1,5>).
|
Pro zvídavé programátory: Generování
náhodných čísel pod drobnohledem |
Pro generování náhodných čísel se zvyčejně používá funkce Rnd
společně s příkazem Randomize. Není-li příkaz Randomize
následován numerickou hodnotou, která by inicializovala generátor náhodných
čísel, je generátor inicializován na základě hodnoty získané prostřednictvím
systémového času (přesněji jde o návratovou hodnotu funkce Timer).
Příkaz Randomize nemusí být vůbec aplikován; v tomto případě je
funkce Rnd inicializována posledně vygenerovaným číslem. Funkce Rnd vrací hodnotu, která může být větší nebo rovna než
nula, ovšem je vždy menší než 1. Takto získaná hodnota ovšem není zvyčejně
použitelná, a proto je nějak smysluplně upravena. Vygenerovaná hodnota tak
může být třeba vynásobena jistým číslem (nejčastěji mocninou čísla 10).
Číslo, které bylo vytvořeno pomocí funkce Rnd, je uloženo ve tvaru
datového typu Single (jde tedy o číslo s desetinnou částí). Protože
při generování náhodných čísel se ve většině experimentů nepoužívá právě ona
desetinná část čísla, bývá tato odstraněna. Existují dva způsoby, pomocí
kterých lze „zlikvidovat“ desetinnou část náhodného čísla: 1. Zaokrouhlení náhodného čísla 2. Ořezání desetinné části náhodného čísla K zaokrouhlení náhodného čísla podle známých matematických pravidel
dochází při následujících příležitostech: 1.
Při přiřazení náhodného čísla do celočíselné
proměnné. V tomto okamžiku je implicitně realizována konverze náhodného
čísla z datového typu Single do cílového celočíselného datového
typu. 2.
Při explicitně realizované konverzi použitím
vhodné konverzní funkce, např. CInt nebo CShort. Ořezaní desetinné části náhodného čísla lze uskutečnit zavoláním funkce
Int nebo funkce Fix. Obě funkce odstraňují desetinnou část
náhodného čísla, ovšem při práci se zápornými čísly se chovají poněkud
odlišně (tato odlišnost nás ale nemusí zajímat, protože my pracujeme pouze
s kladnými čísly). Budete-li chtít získat náhodné celé číslo z jistého intervalu, použijte
tuto magickou formulku: Proměnná = Int ((Horní hranice intervalu –
Dolní hranice intervalu + 1) * Rnd() + Dolní hranice intervalu) Pro interval <0, 100> bude programový kód vypadat takto: Proměnná = CInt(Int((100 - 1 + 1) * Rnd()) + 1) Aby kód vypadal uhlazeně, upravíme jej takto:
Proměnná = CInt(Int(100 * Rnd()) + 1) Algoritmus generování náhodného čísla má přibližně tuto podobu: 1.
Funkce Rnd vrátí náhodně vybranou
numerickou hodnotu typu Single z intervalu <0, 1). Povězme, že
funkce Rnd vybere hodnotu 0.234. 2.
Hodnota 0.234 je vynásobena hodnotou 100, čímž
získáváme mezihodnotu 23.4. 3.
Funkce Int odstraní desetinnou část
mezihodnoty, na což se z čísla s desetinnou částí stane celé číslo
23. 4.
K hodnotě 23 je připočtena hodnota dolní
hranice zvoleného intervalu (v našem případě 1). Dostáváme tak konečnou
podobu náhodného čísla 24. |
|
Právě jste dočetli 11. 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? |
|
Programování vícevláknových aplikací |
||
Nepřehlédněte exkluzivní
Speciál pro programátory, který pojednává o jazykové interoperabilitě mezi
jazyky Managed Extensions for C++ a Visual Basic .NET. |