|
ZaΦßteΦnφk |
PokroΦil² |
Profesionßl |
|||||
|
|
|
||||||
┌vod
do sv∞ta .NET /4. dφl Modernφ technologie
v²voje softwaru |
||||||||
|
|
Budete pot°ebovat
p°ibli₧n∞ 30 minut |
|
OperaΦnφ systΘm
pou₧it² v p°φsp∞vku: Windows 2000 V²vojovΘ nßstroje: Visual Basic .NET |
||||
|
Vß₧enφ Φtenß°i,
v dneÜnφm dφlu serißlu zaΦn∞me s vysv∞tlovßnφm pojmu prom∞nnß. Dozvφte se, na co vlastn∞ prom∞nnΘ slou₧φ, jak se deklarujφ a inicializujφ. TakΘ bude oz°ejm∞n pojem obor prom∞nnΘ. P°eji p°φjemnΘ poΦtenφ. á
Obsah |
Pojem prom∞nnß
Tak, jak je zßkladnφ stavebnφ jednotkou aplikace stylu .NET forma zvanß assembly, tak ve sv∞t∞ programovΘho k≤du je zßkladnφ jednotkou pro uklßdßnφ hodnot prom∞nnß. Do prom∞nnΘ lze umφs¥ovat r∙znΘ hodnoty, jako nap°φklad celß Φi desetinnß Φφsla, text, datum atd. Prom∞nnΘ jsou n∞kdy takΘ oznaΦovßny jako kontejnery, aby se jeÜt∞ vφce zv²raznila jejich schopnost uchovßvat jistou hodnotu (obr. 1).
Obr. 1 û Vizußlnφ p°iblφ₧enφ pojmu prom∞nnß
Pokud byste se cht∞li podφvat na prom∞nnΘ z techniΦt∞jÜφho hlediska, zjistili byste, ₧e ka₧dß prom∞nnß alokuje jistΘ mφsto v pam∞ti poΦφtaΦe (prom∞nnß mß tedy sv∙j rozsah, kter² je zpravidla m∞°en v bitech). Prßv∞ toto mφsto v pam∞ti je schopno uchovat hodnotu, kterou mß prom∞nnß äna starostiô. Aby ovÜem bylo mo₧nΘ do prom∞nnΘ umφstit jakoukoliv hodnotu, je pot°ebnΘ ji nejd°φve deklarovat.
Deklarace prom∞nnΘ
Na deklarovßnφ prom∞nn²ch slou₧φ ve VB .NET p°φkaz Dim. Obecn² zßpis procesu deklarace prom∞nnΘ je:
Dim jmΘno_prom∞nnΘ As datov²_typ_prom∞nnΘ
Pokud byste tedy cht∞li deklarovat prom∞nnou Φφslo, kterß by byla datovΘho typu Integer, pou₧ili byste tento zßpis programovΘho k≤du:
ááááááá Dim
Φφslo As Integer
Jste-li zaΦφnajφcφmi programßtory, m∙₧e se vßm mnoho v∞cφ na zp∙sobu deklarace prom∞nnΘ zdßt nejasn²ch, a proto si dovolφm tento proces rozebrat pon∞kud podrobn∞ji. Snad nejd∙le₧it∞jÜφ informacφ je, ₧e neexistuje nic jako äryzφ prom∞nnßô, v₧dy se m∙₧ete st°etnout jenom s prom∞nnou, kterΘ reprezentuje jist² datov² typ. Datov² typ si m∙₧ete p°edstavit jako charakteristiku, kterß blφ₧e urΦuje pou₧itφ prom∞nnΘ. Ve VB .NET se koneckonc∙ m∙₧ete st°etnout s pom∞rn∞ velk²m poΦtem rozliΦn²ch datov²ch typ∙ (jejich charakteristikou se budeme zab²vat v p°φÜtφm dφlu serißlu). P°φkaz Dim zabezpeΦφ rezervaci mφsta v pam∞ti pro vytvo°enou prom∞nnou (p°itom samoz°ejmΘ dbß na to, aby byla velikost rezervovanΘho mφsta v souladu s rozsahem pou₧itΘho datovΘho typu prom∞nnΘ). V zßpisu je takΘ d∙le₧itΘ klφΦovΘ slovo As, za kter²m nßsleduje specifikace zvolenΘho datovΘho typu. Cel² zßpis ukonΦuje nßzev datovΘho typu, v naÜem p°φpad∞ je to typ Integer, kter² je vhodn² pro uklßdßnφ cel²ch Φφsel.
Pou₧ijete-li pouze uveden² zßpis s p°φkazem Dim, je pro prom∞nnou Φφslo jenom vyhrazeno mφsto v pam∞ti poΦφtaΦe, ale samotnß prom∞nnß neobsahuje ₧ßdnou hodnotu. Aby bylo mo₧nΘ umφstit do prom∞nnΘ hodnotu, je zapot°ebφ prom∞nnou inicializovat. Jak na to si ukß₧eme v dalÜφ kapitole.
Inicializace prom∞nnΘ
á
Inicializace prom∞nnΘ se uskuteΦ≥uje pomocφ takzvanΘho p°i°azovacφho p°φkazu.
|
V tΘto souvislosti bychom si takΘ m∞li oz°ejmit pojem p°φkaz.
P°φkazem se obyΦejn∞ rozumφ jeden °ßdek programovΘho k≤du. P°φkazem m∙₧e b²t
ovÜem takΘ klφΦovΘ slovo programovacφho jazyka, po pou₧itφ kterΘho se
uskuteΦnφ n∞jakß operace. Nakonec p°φkazem m∙₧e b²t chßpßna i programovß
konstrukce typu p°i°a∩ovßnφ, kdy dochßzφ k umφst∞nφ hodnoty do prom∞nnΘ.
áááá |
P°i°azovacφ p°φkaz obecn∞ p°i°azuje jistou hodnotu do prom∞nnΘ. ╪eΦeno jin²mi slovy, jenom pomocφ p°i°azovacφho p°φkazu m∙₧ete do prom∞nnΘ ulo₧it n∞jakou hodnotu. Jak ovÜem takov² p°φkaz vypadß? Asi takto:
jmΘno_prom∞nnΘ = hodnota, kterou chceme do prom∞nnΘ p°i°adit
P°i°azovacφ p°φkaz d∞lß p°esn∞ to, co °φkß jeho nßzev, tedy p°i°azuje än∞co n∞kamô. Jak² je cφl p°i°azenφ? No p°ece prom∞nnß. A co do prom∞nnΘ p°i°azujeme? Libovolnou hodnotu v zßvislosti od rozsahu p°φsluÜnΘho datovΘho typu prom∞nnΘ. JeÜt∞ prost∞ji, obsah pravΘ strany p°φkazu je ävlo₧enô do prom∞nnΘ, nßzev kterΘ se nachßzφ na levΘ stran∞ p°i°azovacφho p°φkazu. á
á
Budeme-li chtφt navßzat na p°edchozφ deklaraci prom∞nnΘ Φφslo, m∙₧eme pou₧φt tento zßpis programovΘho k≤du:
ááááááá Φφslo = 1000
á
Tφmto zp∙sobem naznaΦφme VB .NET, aby do prom∞nnΘ umφstil hodnotu (Φφslo) 1000.
Porovnßnφ mezi deklaracφ a inicializacφ prom∞nnΘ znßzor≥uje obr. 2.
Obr. 2 û Rozdφl mezi deklaracφ a nßslednou inicializacφ
prom∞nnΘ
Pokud ji v budoucnu nezm∞nφte, prom∞nnß Φφslo bude stßle obsahovat tuto hodnotu.
Abyste se p°esv∞dΦili, ₧e prom∞nnß opravdu obsahuje zadanou Φφselnφ hodnotu,
m∙₧ete pou₧φt metodu Show t°φdy MessageBox v nßsledujφcφm tvaru:
áá
ááááááá MessageBox.Show(Φφslo)
Metod∞ Show je v tomto p°φpad∞ jako vstupnφ
hodnota (p°esn∞ji jako parametr) p°edßna prom∞nnß Φφslo, a proto₧e metoda zobrazuje
v dialogovΘm okn∞ hodnotu svΘho parametru, ud∞lß tak i v naÜem p°φpad∞
a zobrazφ okno s hodnotou 1000. Dobrß, p°esv∞dΦili jste se, ₧e prom∞nnß
opravdu obsahuje vlo₧enou hodnotu. Pokud byste cht∞li zm∞nit hodnotu prom∞nnΘ
t°eba na rovn² milion, op∞t pou₧ijete p°i°azovacφ p°φkaz, jenom s nov²m
urΦenφm hodnoty:
ááááááá Φφslo = 1000000
á á
Takto je
p°edchozφ obsah prom∞nnΘ Φφslo smazßn a nahrazen novou hodnotou. Demonstrovan²m postupem m∙₧ete m∞nit
hodnotu prom∞nnΘ, no nesmφte v ₧ßdnΘm p°φpad∞ zapomenout na rozsah
prom∞nnΘ. Ten toti₧ urΦuje interval hodnot, kterΘ m∙₧ete do prom∞nnΘ ulo₧it (v
p°φpad∞ datovΘho typu Integer je tento interval <-2 147 483 648, 2 147 483 647>)
|
Datov² typ Integer je uchovßvßn jako 32bitovß, resp. 4bajtovß
hodnota. Jde o datov² typ, jen₧ poskytuje nejefektivn∞jÜφ v²kon p°i celoΦφseln²ch
operacφch na dvaat°icetibitov²ch procesorech.áááááá |
á
Jestli₧e
byste do prom∞nnΘ Φφslo
p°i°adili hodnotu mimo povolen² interval, VB .NET by vygeneroval chybovΘ
hlßÜenφ.
V souvislosti
s uchovßvßnφm hodnot pomocφ prom∞nnΘ by vßs ovÜem mohla napadnout otßzka, dokdy ve skuteΦnosti prom∞nnß bude p°i°azenou
numerickou hodnotu obsahovat. Aby bylo mo₧nΘ vy°eÜit toto dilema, musφme si
vysv∞tlit dalÜφ d∙le₧it² pojem, kter²m je obor prom∞nnΘ.áá
áá
Obor prom∞nnΘ
Oborem
prom∞nnΘ rozumφme Φasov² interval, v rßmci kterΘho prom∞nnß udr₧uje svou
hodnotu. Umφstφte-li na formulß° projektu tlaΦφtko a poklepete na n∞j, otev°e
se editor pro zßpis k≤du. V prost°edφ editoru m∙₧ete zapsat k≤d t°eba pro
udßlostnφ proceduru Click
tlaΦφtka. Kdybychom v tΘto udßlostnφ procedu°e deklarovali prom∞nnou Φφslo a p°i°adili do tΘto prom∞nnΘ
numerickou hodnotu, prom∞nnß by obsahovala tuto hodnotu jenom dokud by byl
vykonßvßn k≤d danΘ procedury. Kdy₧ se provßd∞nφ udßlostnφ procedury ukonΦφ,
zlikvidujφ se vÜechny prom∞nnΘ, kterΘ byly v tΘto procedu°e deklarovßny (a
pochopiteln∞ dojde i k destrukci hodnot, kterΘ tyto prom∞nnΘ obsahovaly).
P°edve∩me si tuto situaci prakticky na ukßzce programovΘho k≤du obsluhy
udßlosti Click
tlaΦφtka Button1:
ááá Private
Sub Button1_Click(ByVal
sender As System.Object, _
ááá ByVal
e As System.EventArgs) Handles
Button1.Click
ááááááá Dim
Φφslo As Integer
ááááááá Φφslo = 1000
ááááááá MessageBox.Show(Φφslo)
ááá End
Sub
Uvnit°
procedury typu Sub je deklarovßna prom∞nnß Φφslo typu Integer. Prom∞nnß je takΘ inicializovßna na
hodnotu 1000. DalÜφ p°φkaz zobrazuje dialogovΘ okno s hodnotou. Tφm je
·kol udßlostnφ procedury spln∞n a procedura je ukonΦena. V tΘ chvφli
dochßzφ k likvidaci prom∞nnΘ Φφslo a takΘ ämizφô hodnota, kterß byla do
prom∞nnΘ Φφslo
ulo₧ena. Proto °φkßme, ₧e oborem prom∞nnΘ Φφslo je udßlostnφ procedura Click tlaΦφtka Button1.
Prom∞nnß
m∙₧e mφt i daleko ÜirÜφ obor. Oborem prom∞nnΘ m∙₧e b²t cel² formulß° (resp.
celß t°φda formulß°e) nebo takΘ cel² projekt VB .NET (jestli₧e je prom∞nnß
deklarovßna v doprovodnΘm modulu).
|
Modulem se rozumφ specißlnφ soubor, do kterΘho se uklßdajφ tzv.
ve°ejnΘ prom∞nnΘ, funkce a dalÜφ platnΘ programovΘ konstrukce. |
Zkusme si prvnφ
z t∞chto variant ukßzat na praktickΘm p°φkladu. á
P°φklad: Formulß° (t°φda formulß°e) jako obor prom∞nnΘ
ááá Private Sub
Button1_Click(ByVal sender As System.Object, _
ááá ByVal e As
System.EventArgs) Handles Button1.Click
ááááááá Φφslo
= 1000
ááááááá
MessageBox.Show(Φφslo)
ááá End Sub
ááá Private Sub
Button2_Click(ByVal sender As System.Object, _
ááá ByVal e As
System.EventArgs) Handles Button2.Click
ááááááá
MessageBox.Show(Φφslo)
ááá End Sub
Public Class Form1
ááá Inherits
System.Windows.Forms.Form
áááá
a deklarujte prom∞nnou Φφslo zßpisem:
Dim Φφslo As Integer
Public Class Form1
ááá Inherits System.Windows.Forms.Form
ááá Dim Φφslo As Integer
"Windows Form Designer generated code"
ááá Private Sub
Button1_Click(ByVal sender As System.Object, _
á ááByVal e As System.EventArgs) Handles
Button1.Click
ááááááá Φφslo
= 1000
ááááááá
MessageBox.Show(Φφslo)
ááá End Sub
ááá Private Sub
Button2_Click(ByVal sender As System.Object, _
ááá ByVal e As
System.EventArgs) Handles Button2.Click
ááááááá
MessageBox.Show(Φφslo)
ááá End Sub
End Class
Kdy₧ pustφte
aplikaci a klepn∞te na prvnφ tlaΦφtko, objevφ se dialogovΘ okno, kter² bude
ukazovat numerickou hodnotu (1000) prom∞nnΘ Φφslo. Po ukonΦenφ udßlostnφ procedury Button1_Click ovÜem nedojde k likvidaci
prom∞nnΘ Φφslo,
proto₧e oborem tΘto prom∞nnΘ je v tomto p°φpad∞ cel² formulß° a ne jenom
procedura. Klepnete-li na druhΘ tlaΦφtko, zobrazφ se aktußlnφ stav prom∞nnΘ Φφslo, tedy op∞t numerickß hodnota 1000. Ptßte
se, kdy je v tomto p°φpad∞ prom∞nnß zlikvidovßna? K destrukci
prom∞nnΘ dochßzφ ve chvφli likvidace formulß°e (resp. odstran∞nφ formulß°e
z pam∞ti poΦφtaΦe). á
Jßn Hanßk