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.

 

Obsah

Raison d´être datových typů ve VB .NET

Přehled datových typů ve VB .NET

Celočíselné datové typy

Datové typy pro uchovávání čísel s pohyblivou desetinnou čárkou

Ostatní datové typy

Uživatelsky definované datové typy

 

 

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:

 

  1. Celočíselné datové typy
  2. Datové typy pro uchovávání čísel s pohyblivou desetinnou čárkou
  3. Ostatní datové typy

 

 

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:

 

  1. Boolean (.NET ekvivalent: System.Boolean)

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

  

  1. Char (.NET ekvivalent: System.Char)

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ě.   

 

  1. String (.NET ekvivalent: System.String)

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.    

 

  1. Date (.NET ekvivalent: System.DataTime)

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. 

 

  1. Object

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í:

 

  1. Spusťte VB .NET a vytvořte nový projekt.
  2. Vyberte nabídku Project a klepněte na položku Add New Item.
  3. V sekci Templates okna Add New Item vyberte ikonu modulu (obr. 2).

 

 

Obr. 2 – Výběr modulu v okně Add New Item

 

  1. Aktivujte tlačítko Open, na což se do projektu přidá soubor s modulem (je standardně pojmenován jako Module1.vb).
  2. Vložte do kódu modulu programový kód pro vytvoření struktury Student:

 

Module Module1

    Structure Student

        Dim Jméno_studenta As String

        Dim Průměrný_prospěch As Single

    End Structure

End Module

 

  1. Na formulář umístěte tlačítko (nechte jej standardně pojmenované) a jeho obsluhu události Click vyplňte následujícím kódem:

 

        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.

 

  1. Výsledek práce kódu celé praktické ukázky můžete vidět na obr. 3.

 

 

Obr. 3 – Výsledek práce UDT

 

 

Ján Hanák