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ß

Deklarace prom∞nnΘ

Inicializace prom∞nnΘ

Obor prom∞nnΘ

P°φklad: Formulß° (t°φda formulß°e) jako obor prom∞nnΘ

 

 

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Θ

 

  1. Vytvo°te ve VB .NET nov² projekt typu Windows Application.
  2. Na formulß° umφst∞te dv∞ tlaΦφtka, kterß nechte standardn∞ pojmenovanß.
  3. Poklepejte na prvnφ tlaΦφtko a upravte podobu udßlostnφ procedury Click podle vzoru:

 

ááá Private Sub Button1_Click(ByVal sender As System.Object, _

ááá ByVal e As System.EventArgs) Handles Button1.Click

ááááááá Φφslo = 1000

ááááááá MessageBox.Show(Φφslo)

ááá End Sub

 

  1. Klepn∞te na druhΘ tlaΦφtko a zadejte programov² k≤d pro zobrazenφ dialogovΘho okna se zprßvou:

 

ááá Private Sub Button2_Click(ByVal sender As System.Object, _

ááá ByVal e As System.EventArgs) Handles Button2.Click

ááááááá MessageBox.Show(Φφslo)

ááá End Sub

 

  1. V tΘto chvφli je nutnΘ uΦinit nejv²znamn∞jÜφ krok, a sice deklarovat prom∞nnou, oborem kterΘ bude t°φda formulß°e. P°emφst∞te kurzor pod prvnφ dva °ßdky veÜkerΘho programovΘho k≤du formulß°e, tedy pod tyto dva °ßdky:

 

Public Class Form1

ááá Inherits System.Windows.Forms.Form

áááá

a deklarujte prom∞nnou Φφslo zßpisem:

 

Dim Φφslo As Integer

 

  1. Pohled na programov² k≤d formulß°e by m∞l mφt tuto podobu:

 

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