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φ