Integrované prostředí rubriky Visual Basic

Autor: Ján Hanák

Začínáme s VB .NET

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

Časová náročnost

(min):

40

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ý

 

 

Vážení čtenáři,

 

dvanáctá lekce o programování ve Visual Basicu .NET pro začátečníky již na vás netrpělivě čeká. Náplní jsou i nadále operátory: Nejprve si vysvětlíme speciální porovnávací operátory Is a Like, a poté plynule přejdeme na další kategorie operátorů. Přeji vám příjemné počtení.

 

Obsah

Porovnávací operátor Is

Porovnávací operátor Like

Přiřazovací operátory

Logické operátory

 

 

Porovnávací operátor Is

 

Operátor Is se používá pro zjištění, zdali obsahují dvě různé referenční proměnné ukazatele na stejný objekt. Jestliže je výsledek porovnání kladný, operátor vrací hodnotu True, v opačném případě False. Budete-li například chtít zjistit, zdali dvě referenční proměnné obsahují odkaz na aktuální instanci formuláře, můžete použít následující fragment programového kódu:

 

        Dim refA, refB As Form

        refA = Me

        refB = refA

        Me.Text = CType((refB Is refA), String)

 

Obě odkazové proměnné (refA, refB) mohou uchovávat reference na instance třídy Form. Do proměnné refA je uložen odkaz na aktuální instanci třídy Form (pomocí klíčového slova Me). Přiřazovací příkaz způsobí kopírování reference, která je uložena v proměnné refA, do proměnné refB.

 

Připomeňme si, jak pracuje operátor přiřazení při hodnotových a referenčních proměnných:

 

1.      Jestliže použijeme přiřazovací operátor na dvě hodnotové proměnné, bude hodnota proměnné, která je umístěna napravo od přiřazovacího operátoru, zkopírována do proměnné, která se nachází na levé straně přiřazovacího operátoru. Při tomto typu kopírovacího procesu dochází ke kopírování hodnoty jedné proměnné do druhé proměnné. Zkopírovaná hodnota je přitom zcela nezávislá od svého originálu.

 

2.      Operátor pro přiřazení se ve společnosti referenčních proměnných chová zcela jinak. Jak jsme si již řekli, odkazové proměnné jsou naplněné referencemi, které ukazují zvyčejně na objekty, tedy instance tříd. Předmětem kopírování se v tomto případě stává hodnota referenční proměnné, tedy samotná reference. Detailněji řečeno, reference, která je uložena v proměnné, jež se nachází na pravé straně přiřazovacího příkazu, bude zkopírována do odkazové proměnné, nacházející se na levé straně operátoru pro přiřazení. Výsledkem celého procesu je skutečnost, že obě referenční proměnné obsahují stejné reference na jednu (cílovou) instanci třídy. Změníme-li stav objektu pomocí jedné referenční proměnné, tato změna se projeví i při použití druhé odkazové proměnné. Zde je důležité si uvědomit, že ačkoliv používáme dvě různé referenční proměnné, obě dvě jsou nasměrované na stejný objekt.

 

Pokud se rovnají reference obou odkazových proměnných, bude vrácena operátorem Is hodnota True (jako v tomto případě). Používáte-li při programování volbu Option Strict nastavenou na hodnotu True, budete rovněž muset explicitně přetypovat návratovou hodnotu operátoru Is z typu Boolean na typ String (například pomocí konverzní funkce CType, jak je uvedeno ve výše představené ukázce kódu).

 

 

Porovnávací operátor Like

 

Operátor Like se používá pro speciální porovnání textových řetězců, resp. porovnání textových znaků v textových řetězcích. Generická podoba použití operátoru Like je tato:

 

Výsledek = TextovýŘetězec Like šablona

 

Výsledkem je pravdivostní hodnota, která identifikuje, zdali TextovýŘetězec splňuje kritéria šablony. Pokud je porovnání vyhovující, je do proměnné Výsledek uložena hodnota True, jinak bude proměnná Výsledek obsahovat hodnotu False.

 

Prostřednictvím operátoru Like můžeme například zkoumat, zdali se požadovaný znak nachází v jisté skupině znaků:

 

        Dim textA As String = "C"

        Dim textB As String = "[A-F]"

        Me.Text = CStr(textA Like textB)

 

Operátor Like testuje, jestli se znak C nachází v posloupnosti znaků A až F. Ano, tato podmínka je splněna, a proto se v titulku dialogového okna objeví hodnota True. Šablonou mohou být různé zástupné znaky, přičemž jejich popis můžete najít v dokumentaci k Visual Basicu .NET. Použití operátoru Like se váže na způsob, jakým Visual Basic .NET přistupuje k porovnávaní textových řetězců. Práce s řetězci je založená na volbě Option Compare.

 

Budete-li experimentovat s nastaveními volby Option Compare, mějte na paměti, že kód volby musí být umístěn před veškerý kód třídy, resp. modulu (podobně, jako tomu je u voleb Option Strict a Option Explicit).  

 

Tato volba může nabývat pouze dvou hodnotu:

 

  1. Option Compare Binary – determinuje, že výsledek porovnávání řetězců je založen na binární charakteristice jednotlivých znaků. Znamená to, že při porovnávaní znaků textového řetězce se Visual Basic .NET řídí binární podobou těchto řetězců. Operační systémy Windows provádějí řazení znaků pomocí kódové stránky. Jestliže je použita volba Option Compare Binary, velké písmena abecedy jsou řazena před své odpovídající malé protějšky (při porovnání tedy sehrává roli velikost znaků). Například písmeno A je řazeno před písmeno a. Jestliže neuvedete jinak, je při porovnávání řetězců implicitně použita volba Option Compare Binary.

 

  1. Option Compare Text – nařizuje porovnání, v rámci kterého Visual Basic .NET nenahlíží na velikost znaků, ovšem systém porovnávání je založen na místní konfiguraci operačního systému. Navážeme-li na předchozí příklad s varianty písmena A, můžeme prohlásit, že při použití volby Option Compare Text se velké písmeno rovná své malé alternativě, tedy A = a.   

 

 

Přiřazovací operátory

 

Přiřazovací operátory provádějí přesně to, co vyplývá z jejich názvu, tedy přiřazují jisté hodnoty, nejčastěji z jedné proměnné do jiné proměnné. Obecná podoba použití přiřazovacích operátorů je následovní:

 

Proměnná = hodnota

 

Proměnnou může být jakákoliv platně deklarovaná proměnná, ovšem je třeba brát v úvahu datový typ této proměnné. Datový typ proměnné je užitečný pro vymezení intervalu cílových hodnot, které lze do proměnné umístit. Pochopitelně, specifikace datového typu proměnné by se měla odvíjet od charakteru hodnot, které budeme chtít do proměnné uložit. Proměnné typu Integer dokáží ukládat celá čísla, zatímco typ String je výhodné použít při práci s textovými řetězci. Ve skutečnosti je Visual Basic .NET poněkud méně náchylný na nesoulad datových typů proměnných a typů hodnot, které lze do těchto proměnných uložit. Pokud se hodnota, kterou chcete do proměnné uložit, neshoduje s datovým typem proměnné, Visual Basic .NET se bude snažit tento nesoulad „zahladit“, a to pomocí konverze typu hodnoty. Máme-li deklarovanou proměnnou typu String a uložíme do ní čelnou hodnotu, nebude hlášena žádná chyba ani v režimu návrhu aplikace, ani při jejím běhu. Visual Basic .NET je natolik inteligentní, že nezbytné konverzní operace provede automaticky sám. Připomeňme, že implicitní konverze jsou realizovány jenom v případě, jestliže nemůže při konverzním procesu dojít ke ztrátě dat a jestliže nepoužíváte při programování volbu Option Strict nastavenou na hodnotu True. V opačném případě se ke slovu dostávají explicitní konverze.

 

Visual Basic .NET nabízí spoustu přiřazovacích operátorů, přičemž novinkou jsou zkrácené tvary některých operátorů. V tab. 1 můžete vidět ukázky použití přiřazovacích operátorů.

 

Přiřazovací operátor

Ukázka použití

Ekvivalentní zápis

Operátor přiřazení (=)

Dim x As Short = 20

Dim x As Short = 20

Zkrácený operátor pro sčítání a přiřazení (+=)

x += 1

x = x + 1

Zkrácený operátor pro odečítání a přiřazení (-=)

x -= 1

x = x – 1

Zkrácený operátor pro násobení a přiřazení (*=)

x *= y

x = x * y

Zkrácený operátor pro dělení a přiřazení (/=)

x /= z

x = x / z

Zkrácený operátor pro celočíselné dělení a přiřazení (\=)

a \= b

a = a \ b

Zkrácený operátor pro umocňování a přiřazení (^=)

a ^= b

a = a ^ b

Zkrácený operátor pro zřetězení a přiřazení (&=)

a &= b

a = a & b

 

Tab. 1 – Přehled přiřazovacích operátorů

 

Podívejme se teď na způsob práce přiřazovacích operátorů blíže. Vezměme si třeba zkrácený operátor pro sčítání a přiřazení a prozkoumejme, jak ve skutečnosti pracuje:

 

        Dim a1 As Short, a2 As Integer

        a1 = Math.Abs(CShort((-2) * 2))

        a2 = 10

        a2 += a1

        Me.Text = CType(a2, String)

 

Kód pracuje s dvěma proměnnými: a1 typu Short a a2 typu Integer. Do proměnné a1 je přiřazena absolutní hodnota výrazu CShort((-2)*2)), tedy 4. Běh kódu pokračuje naplněním proměnné a2 celočíselnou hodnotou 10. My se však budeme soustředit až na samotnou aplikaci zkráceného přiřazovacího operátoru +=:

 

        a2 += a1

 

Přiřazovací operátor vykonává svoji práci podle tohoto algoritmu:

 

  1. Zjistí hodnotu proměnné, která se nachází na pravé straně přiřazovacího příkazu (a1). Inicializovaná proměnná a1 obsahuje hodnotu 4 a právě tato hodnota bude získána.
  2. Hodnota proměnné a1 bude přičtena k proměnné, která se nachází na levé straně přiřazovacího příkazu (a2).
  3. Součet hodnot proměnných a1 a a2 bude přiřazen do proměnné, stojící na levé straně přiřazovacího příkazu (a2). Výsledkem činnosti operátoru pro sčítání a přiřazení je tedy uložení hodnoty 14 do proměnné a2.

 

Protože proměnné a1 a a2 jsou zástupci různých datových typů, bude ještě před přiřazením finální hodnoty provedeno přetypování hodnoty proměnné a1 do podoby typu Integer.

 

 

Logické operátory

 

Logické operátory se používají pro nalezení pravdivostní hodnoty logických výrazů (logický výraz je posloupnost logických operandů a operátorů). Logickým výrazem je každý výraz, jehož hodnotu lze vyjádřit pomocí logických hodnot True nebo False. Logické operátory společně s logickými výrazy se v programování velmi často používají v případech, kdy je potřebné zjistit, zdali je jistá podmínka platná či nikoliv. Přestože je oblast působnosti logických operátorů značně rozsáhlá, nejvíc se s nimi budete setkávat nejspíš při rozhodovacích konstrukcích If a při cyklech.

 

Visual Basic .NET nabízí následující logické operátory:

 

·          And

·          Or

·          Xor

·          Not

·          AndAlso

·          OrElse

 

Přehled logických operátorů And, Or, Xor a Not, společně s ukázkou jejich aplikace na testovací operandy, přináší tab. 2.

 

Logický operátor

Operand1

Operand2

Použití logického operátoru

Finální pravdivostní hodnota

And

A = True

B = True

A And B

True

A = True

B = False

False

A = False

B = True

False

A = False

B = False

False

Or

A = True

B = True

A Or B

True

A = True

B = False

True

A = False

B = True

True

A = False

B = False

False

Xor

A = True

B = True

A Xor B

False

A = True

B = False

True

A = False

B = True

True

A = False

B = False

False

Not

A = True

 

Not A

False

 

B = False

Not B

True

 

Vysvětlení aplikace logických operátorů And, Or, Xor a Not

And

Operátor And vrací hodnotu True právě tehdy, obsahují-li oba operandy hodnotu True. V opačném případě je vrácená hodnota False. 

Or

Operátor Or vrací hodnotu True, je-li alespoň jeden z operandu pravdivý (True). To znamená, že hodnota True je vrácená vždy, jenom ne tehdy, kdy oba operandy obsahují hodnotu False.

Xor

Operátor Xor vrací hodnotu True, pokud právě jeden operand obsahuje hodnotu True. Tato hodnota (True) je vrácena v případě, kdy oba operandy disponují různou pravdivostní hodnotou.

Not

Operátor Not provádí logickou negaci, tedy převrácení původní pravdivostní hodnoty operandu. Je-li operand pravdivý (True), po aplikace operátoru Not bude jeho hodnota False. Podobně probíhá i zpětný proces (negace již znegované pravdivostní hodnoty).

 

Tab. 2 – Přehled aplikace logických operátorů And, Or, Xor a Not

 

Nyní se podívejme na programovou ukázku použití logických operátorů And, Or, Xor a Not:

 

        Dim x1, x2, x3, x4 As Boolean

        x1 = True

        x2 = Not x1

        x3 = x1 And x2

        x4 = (x1 Or x2) Xor x3

        Me.Text = CType(x4, String)

 

Tento výpis programového kódu vypíše do titulku aktuální instance třídy Form textový řetězec True. Jak Visual Basic .NET dospěl k takovému výsledku? Inu, asi takto:

 

Krok

Komentář k práci programového kódu

Aktuální hodnoty proměnných

x1

x2

x3

x4

1.

Do proměnné x1 je uložena hodnota True.

True

False *

False *

False *

2.

Hodnota proměnné x1 je znegována pomocí operátoru Not, takže do proměnné x2 je uložena hodnota False.

True

False

False *

False *

3.

Na proměnné x1 a x2 je aplikován logický operátor And. Jelikož pravdivostní hodnota obou proměnných není True, operátor vrací hodnotu False.

True

False

False

False *

4.

Mezi hodnotami proměnných x1 a x2 je realizovaná logická disjunkce pomocí operátoru Or. Jelikož proměnná x1 obsahuje hodnotu True, operátor vrací hodnotu True. Na získanou hodnotu True a hodnotu proměnné x3 (False) je použit operátor Xor. Tento operátor vrací hodnotu True tehdy, obsahuje-li právě jeden operand hodnotu True. Tato podmínka je splněna, a proto je do proměnné x4 uložena pravdivostní hodnota True. 

True

False

False

True

Legenda

*

Proměnná je implicitně inicializovaná na hodnotu False.

 

Finální hodnota zkoumané proměnné v daném kroku algoritmu

 

 

Právě jste dočetli 12. 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

Inteligentní značky (Smart Tags)

Programátorská laboratoř

Použití sdílených datových členů, vlastností a metod Vytváření miniatur obrázků (thumbnails)

Deklarování a generování událostí