|
Začátečník |
Pokročilý |
Profesionál |
|||||
|
|
|
||||||
Úvod
do světa .NET /5. díl Moderní technologie
vývoje softwaru |
||||||||
|
|
Budete potřebovat
přibližně 1 hodinu |
|
Operační systém
použitý v příspěvku: Windows 2000 Vývojové nástroje: Visual Basic .NET |
||||
|
Milí čtenáři,
dnes prozkoumáme problematiku datových typů, s nimiž se můžete střetnout při programování ve VB .NET.
Raison d´être datových typů ve VB .NET
Jak jsme si pověděli již v minulé části seriálu, při deklaraci proměnné je potřebné určit datový typ této proměnné. V této souvislosti jste se mohli zeptat, proč se vůbec třeba zabývat s nějakými datovými typy, proč není jednoduše možné používat vždy a na všechny programové operace jenom proměnné jednoho datového typu? Vždyť by to bylo zcela jistě snazší, nebo ne? Inu, lehčí by to jistě bylo, ale podobné myšlenky musí pustit každý z hlavy, když se zamyslí nad významem slov optimální rychlost a výkonnost. Kdybyste pracovali jenom s proměnnými jednoho datového typu, zcela jistě byste se záhy začali potkávat s mnoha problémy. Především, výkonnost aplikace by byla poměrně nízká a při kritických operacích by mohlo dojít buď k neúnosnému zpomalení, nebo přímo ke krachu aplikace. Dále byste mohli zjistit, že i když neprovádíte zrovna rozsáhlé propočty, spotřebováváte stále větší a větší množství paměťového prostoru počítače. A konečně, o optimální výkonnosti a rychlosti programu by nemohlo být ani řeči.
Z uvedených důvodů je potřebné, aby programovací jazyk dokázal efektivně pracovat s rozličnými datovými typy. Jak za chvíli uvidíte, datových typů je ve VB .NET značné množství. Kromě toho, že máte k dispozici různé datové typy, je rovněž velmi důležité, abyste se naučili, kdy ten-který datový typ použít. Právě schopnost programátora „vycítit“, kdy použít ten, nebo jiný datový typ, patří mezi jeho největší přednosti. To již však poněkud zacházíme do problematiky optimalizace programového kódu, a proto si raději ukažme, s jakými datovými typy se budete moci setkat ve VB .NET.
Přehled datových typů ve VB .NET
Celou množinu datových typů ve VB .NET lze rozdělit na následující podmnožiny:
Celočíselné datové typy
Myslím, že se zástupci této kategorie se budete střetávat asi nejčastěji. Jak je z názvu zřejmé, tato podmnožina datových typů je určena na uchovávání celočíselných hodnot. Přehled konkrétních datových typů můžete vidět v tab. 1.
Tab. 1
Datový typ ve VB .NET |
Charakteristika |
Rozsah |
.NET ekvivalent |
Byte |
8-bitové celé číslo
bez znaménka |
<0, 255> |
System.Byte |
Short |
16-bitové celé číslo
se znaménkem |
<-32768, 32767> |
System.Int16 |
Integer |
32-bitové celé číslo
se znaménkem |
<-231, 231-1> |
System.Int32 |
Long |
64-bitové celé číslo
se znaménkem |
<-263, 263-1> |
System.Int64 |
|
Rozsah datového typu si můžete představit jako definiční obor datového
typu (přesněji řečeno, jde o definiční obor proměnné daného datového typu). |
Pokud vám není jasné, co znamenají textové charakteristiky „číslo bez znaménka“ a „číslo se znaménkem“ uvedené v tabulce, nemějte obavy, zde je vysvětlení. Nejprve si představte jednoduchou číselnou os. Pokud rozsah požadovaného datového typu leží pouze v kladné části této pomyslné číselné osi, tak říkáme, že daný datový typ může uchovávat celá čísla bez znaménka (tedy jenom kladná čísla). Na druhé straně, když rozsah datového typu leží na obou stranách osi, pak říkáme, že jde o datový typ, jenž je schopen ukládat celá čísla také se znaménkem (tedy kladná i záporná čísla). Pro lepší ilustraci se podívejte na obr. 1.
Obr. 1 – Názorné zobrazení rozsahu vybraných datových
typů pomocí pomyslné číselné osi
Pokud budete chtít deklarovat proměnnou jednoho z uvedených celočíselných datových typů, budete postupovat tak, jak jsme si ukázali již minule. Použijete tedy příkaz Dim s jménem proměnné, za kterým bude následovat klíčové slovo As a specifikace datového typu. Příklad:
Dim
proměnná_ABC As Short
proměnná_ABC = 120
Datové typy pro uchovávání čísel s pohyblivou desetinnou čárkou
Ve VB .NET můžete nalézt tři datové typy, které vám umožní pracovat s čísly s desetinnou čárkou. Jejich popis najdete v tab. 2.
Tab. 2
Datový typ ve VB .NET |
Charakteristika |
Přesnost |
.NET ekvivalent |
Single |
32-bitové číslo
s pohyblivou desetinnou čárkou |
7 desetinných míst |
System.Single |
Double |
64-bitové číslo
s pohyblivou desetinnou čárkou |
15-16 desetinných
míst |
System.Double |
Decimal |
128-bitové číslo
s pohyblivou desetinnou čárkou |
28 desetinných míst |
System.Decimal |
Specifikace rozsahu jednotlivých datových typů se nachází v tab. 3.
Tab. 3
Datový typ ve VB .NET |
Rozsah |
Single |
<+/- 1,4 x 10-45, +/- 3,4 x 1038> |
Double |
<+/- 5,0 x 10-324,
+/- 1,7 x 10308> |
Decimal |
<+/- 1,0 x 10-28,
+/- 7,9 x 1028> |
Datový typ Single se vyznačuje nejmenší přesností, a proto jej můžete efektivně používat ve chvílích, když sice budete potřebovat uchovat číslo s desetinnou čárkou, no nebudete vyžadovat přílišnou přesnost při provádění požadované operace. Ačkoli je datový typ Decimal nejpřesnější (může uchovat až 28 číslic za desetinnou čárkou), spotřebuje také největší množství paměťového prostoru (16 bajtů). Pokud nebudete výslovně požadovat vysokou přesnost, nebo provádět složité finanční kalkulace, není mnoho důvodů pro využití služeb tohoto datového typu. Jakousi zlatou střední cestu představuje datový typ Double, reprezentovaný v podobě čtyřiašedesátibitového čísla s pohyblivou desetinnou čárkou. Jestliže budete chtít upřednostnit rovnováhu mezi nabízenou přesností a spotřebou paměti, je velmi pravděpodobné, že právě datový typ Double se stane vaším favoritem.
Příklad použití:
Dim
koeficient As Double
koeficient = 1000.255
Ostatní datové typy
Kromě datových typů pro práci s celými čísly a čísly s desetinnou čárkou si musíme povědět také o dalších datových typech, které se velmi často označují i jako „nečíselné“ datové typy. Jde o tyto datové typy:
Datový typ Boolean se používá pro reprezentaci dvou pravdivostních stavů proměnné: True a False. S proměnnými tohoto typu se můžete setkat například při rozhodovacích konstrukcích a cyklech (programový kód rozhodovací konstrukce se provede, jestliže je pravdivostní hodnota proměnné True, cyklus se může opakovat tak dlouho, dokud proměnná obsahuje hodnotu True atd.). Proměnné datového typu Boolean jsou uchovávány jako 16-bitová čísla.
|
Když jsou číselné datové typy konvertovány do datového typu Boolean,
postupuje se podle následujícího pravidla: všechny číselné hodnoty kromě nuly
(0) představují pravdivostní hodnotu True a samotná nula odpovídá hodnotě
False. |
Příklad aplikace:
Dim
podmínka As Boolean
podmínka = True
Datový typ Char vám pomůže, budete-li chtít pracovat se symboly Unicode v rozsahu
<0, 65535>. Pokud budete chtít deklarovat proměnnou Znak datového typu Char a přiřadit do ní znak
„W“, můžete to udělat takto:
Dim znak As Char
znak = "W"c
Všimněte si prosím, že znak je umístěn do dvojitých uvozovek a je k němu přidán také sufix „c“. Když použijete tento sufix, tak Visual Basicu .NET sdělujete, aby na uvedený symbol nahlížel jako na znak datového typu Char.
|
Použití sufixu je nevyhnutné jenom při programování s volbou Option
Strict nastavenou na hodnotu On. O použití této volby si povíme příště. |
I když je práce s textovými řetězci v jiných jazycích (zejména C a C++) dosti náročná, VB .NET vás ani tentokrát nenechá na holičkách. Nabízí vám datový typ String, jenž vám poslouží při ukládání textových řetězců jakéhokoliv druhu. Jenom pamatujte na to, že textový řetězec musí být umístěn do dvojitých uvozovek tak, jak je to uvedeno níže:
Dim
pozdrav As String
pozdrav = "Optimalizovanému kódu zdar!"
Proměnné datového typu String si můžete představit jako sekvenci 16-bitových čísel bez znaménka v rozsahu <0, 65535>. Pokud rozvineme myšlenky, každé číslo si můžete dále představit jako symbol Unicode. Prostřednictvím analogie pak dojdeme k tomu, že datový typ String je posloupností více instancí datového typu Char.
Chcete-li například zjistit, kolik dní uplynulo ode dne vašeho narození, zcela jistě budete potřebovat datový typ Date. Proměnné datového typu Date jsou schopny pojmout popis data, a to od 1. ledna roku 1 až do 31. prosince roku 9999. Tento datový typ je rovněž možné použít pro ukládaní času, od půlnoci (0:00:00) až do konce dne (23:59:59).
Dim
datum_narozeni As Date
Dim
dnesni_datum As Date
Dim
rozdil As
Long
datum_narozeni
= #3/21/2002#
dnesni_datum
= #3/21/2003#
rozdil
= DateDiff(DateInterval.Day, _
datum_narozeni,
dnesni_datum)
MessageBox.Show(rozdil.ToString)
Na uvedené ukázce programového kódu jsme si ukázali základní náležitosti, které platí při práci s datovým typem Date. Předně je potřebné, abyste měli na paměti, že datum, které budete ukládat do příslušné proměnné, musí být zapsáno v tomto formátu:
#měsíc/den/rok#
Aby bylo možné zjistit, kolik dní tvoří interval stanovený dvěma daty, můžeme zavolat funkci DateDiff. Funkci zadáme počáteční i koneční datum a ještě specifikujeme, aby výsledkem byl počet dní mezi zadanými daty.
Datový typ Object je schopen pojmout hodnotu jakéhokoliv datového typu. Proměnné tohoto typu můžou obsahovat jak celá čísla, tak numerické hodnoty s pohyblivou desetinnou čárkou a rovněž tak hodnoty ostatních datových typů. Datový typ Object má rozsah 32 bitů.
|
Všechny datové typy, či už jde o hodnotové nebo referenční typy, jsou
odvozeny z bázového typu Object. Jinak řečeno, datový typ Object
je základem pro všechny ostatní datové typy. |
Příklad použití:
Dim
obj As
Excel.Application
obj
= CType(CreateObject("Excel.Application"),
_
Excel.Application)
obj.Visible = True
Uživatelsky definované datové typy
Budete-li chtít, můžete definovat také své vlastní datové typy. Uživatelsky definované typy (UDT) se tvoří pomocí příkazu Structure, jenž má tento tvar:
Structure Jméno_uživatelsky_definovaného_datového_typu
‘ deklarace členů struktury
End Structure
Struktura obvykle obsahuje několik členů. Členem se rozumí deklarovaná proměnná podporovaného datového typu. Předpokládejme, že budete chtít vytvořit uživatelsky definovaný datový typ s názvem Student. Už víte, že k tomu, abyste splnili tento úkol, budete potřebovat vytvořit strukturu. Dále předpokládejme, že budete chtít sledovat jméno studenta a jeho průměrný prospěch. Proto vytvoříte dva členy struktury, jeden s názvem Jméno_studenta (datový typ String) a další s názvem Průměrný_prospěch (datový typ Single).
|
Programový kód pro zápis charakteristiky uživatelsky definovaného
datového typu musíte umístit před všechen kód třídy formuláře, nebo do
samostatného modulu. V následujícím textu bude ozřejměna druhá varianta.
|
Po vytvoření struktury bude možné deklarovat proměnnou datového typu Student. Tuto proměnnou posléze inicializujeme na požadované hodnoty. Jak na to, si ukážeme v následující praktické programové ukázce. Postupujte podle vyznačených instrukcí:
Obr. 2 – Výběr modulu v okně Add New Item
Module Module1
Structure Student
Dim Jméno_studenta As String
Dim Průměrný_prospěch As Single
End Structure
End Module
Dim
student1 As Student
student1.Jméno_studenta =
"Jan Novák"
student1.Průměrný_prospěch =
3.2
MessageBox.Show("Jméno studenta: " &
student1.Jméno_studenta & _
Chr(13) & "Průmerný prospěch: " &
student1.Průměrný_prospěch, _
"Školní záznam")
V této chvíli bych se rád přistavil při tomto fragmentu programového kódu a vysvětlil vám, jak pracuje. První důležitou věcí je samotná deklarace proměnné. Jak vidíte, proměnná student1 je deklarována použitím uživatelsky definovaného typu Student. Poněkud nejasným se vám může zdát také způsob, jakým je proměnná student1 inicializována. Při inicializaci UDT totiž platí podobná pravidla jako při inicializaci vlastností. Proto musí za názvem proměnné následovat tečkový operátor (.) a jméno platného člena struktury, pomocí které byla naše proměnná (student1) vytvořena. Členu struktury je nakonec přiřazena hodnota na základě specifikace jeho datového typu. Podobnou koncepci, jaká platila při inicializaci proměnné, použijete i ve chvíli, kdy budete chtít zpětně získat hodnoty, které členy struktury obsahují.
|
Jestliže chcete rozdělit programový kód na několik řádků, na konci
jednoho řádku zadejte mezeru a znak podtržení (_). Dále stiskněte
klávesu Enter a pokračujte
v psaní kódu na následujícím řádku. |
|
Pro spojení rětězce a proměnné v signatuře metody Show
třídy MessageBox můžete použít symbol zřetězení (&). Simulaci aktivace klávesy Enter docílíte, když
funkci Chr předáte ASCII kód této klávesy (jenž má hodnotu 13). |
Věřím, že na první pohled může být tento postup použití UDT poněkud frustrující, no nemějte obavy, zanedlouho bude pro vás vytváření a používání uživatelsky definovaných typů hračkou.
Obr. 3 – Výsledek práce UDT
Ján Hanák