× Aktuálně z oboru

SHIELD Experience Upgrade 7 – méně hledání a více zábavy [ clanek/2018052902-shield-experience-upgrade-7-mene-hledani-a-vice-zabavy/ ]
Celá zprávička [ clanek/2018052902-shield-experience-upgrade-7-mene-hledani-a-vice-zabavy/ ]

VB - 25. lekce

[ http://programujte.com/profil/27-jiri-chytil/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/118-zdenek-lehocky/ ]Google [ ?rel=author ]       28. 8. 2005       14 637×

25.1 Vlastní datové typy
25.2 Využití datových typů ve funkcích
25.3 Výčtové typy ENUM
25.4 Domácí úkol
25.5 V další lekci

25.1 Vlastní datové typy

Co to je ? Ne, nebojte, nebudete vytvářet typy podobné Double nebo Long. Vytvářet budeme Typ, který v sobě obsahuje více dalších typů. Nejdřív se podíváme, jak vypadá definice takového typu:


Type ColorValue
  lngRed As Long
  lngGreen As Long
  lngBlue As Long
  lngCyan As Long
  lngMagenta As Long
  lngYellow As Long
  lngGrey As Long
End Type

No jo, to, co jsem tu napsal, je sice hezké, ale proč to používat, když místo toho můžu napsat:


Dim lngRed As Long
Dim lngGreen As Long
Dim lngBlue As Long
Dim lngCyan As Long
Dim lngMagenta As Long
Dim lngYellow As Long
Dim lngGrey As Long

No důvod je tu zřejmý: představte si, že potřebujete ve funkci vrátit více hodnot než jednu. Ptáte se jak? No samozřejmě, že pomocí datových typů.

25.2 Využití datových typů ve funkcích

No tak teď teda k praxi a hned si ukážeme jak to využít.

Do modulu:


Public Type InfoOZamestnanci 'definice Typu
  strMeno As String
  strPrimeni As String
  bytVek As Byte
  intPlat As Integer
  blnAuto As Boolean
End Type

Public Function VratInfoOZamestnanci(intIdZamstnance) As InfoOzamsnanci 'funkce
  VratInfoOZamestnanci.strMeno = "Petr"
  VratInfoOZamestnanci.strPrimeni = "Málek"
  VratInfoOZamestnanci.bytVek = 54
  VratInfoOZamestnanci.intPlat = 23500
  VratInfoOZamestnanci.blnAuto = True
End Function

Do Formuláře:


Dim IZamesnanec As InfoOzamsnanci

Private Sub Command1_Click()
  IZamesnanec = VratInfoOZamestnanci(2)
  txtJmeno.Text = IZamesnanec.strMeno
  txtPrimeni.Text = IZamesnanec.strPrimeni
  txtPalt.Text = IZamesnanec.intPlat
  optAuto.Value = IZamesnanec.blnAuto
End Sub

Tak teď se na to podíváme podrobněji a popíšeme si, co je to vše zač. Tak především vás musím upozornit na to, že uživatelsky definovaný typ není proměnná, jak by si někdo mohl mylně myslet. Proměnná ovšem tento typ může využívat. V našem případě je takovou proměnnou IZamesnanec. Je to tedy proměnná typu InfoOzamsnanci. Stejně jako by to mohla být proměnná typu Long či Integer, ale to není. Stejně tak funkce je typu InfoOZamestnanci. Tato funkce nám tedy nese požadavek tvořený voláním funkce s doplněným parametrem, který tvoří ID číslo pracovníka. Funkce nám pak o zaměstnanci vrátí sadu informací. A protože by bylo značně nepraktické psát pro každou informaci zvláště funkci, vrátí se nám informace jako datový typ v názvu funkce. Data z ní dostaneme tím, že je nahrajeme do funkce stejného typu. A zní pak hodnoty vybíráme jak je ukázáno na výše uvedeném příkladě. Hodnoty ale můžeme předávat také přímo, bez použití proměnné:


txtPalt.Text = VratInfoOZamestnanci(2).bytVek

No to by bylo to důležité k uživatelsky definovaným typům. Jejich použití časem velmi oceníte například u knihoven či tříd. Nebo jen tak ke kávě :).

25.3 Výčtové typy ENUM

Výčtové typy? Tak to hned uvidíte, co to je:


Public Enum barvy
    red = 1
    blue = 2
    green = 3
    cyan = 4
    magenta = 5
    yellow = 6
End Enum

Toto je definice výčtového typu, je to takový seznam konstant. Teď se podíváme, jak může vypadat jeho použití v kódu:


Dim a As barvy

Private Sub Command1_Click()
Command1.Caption = barvy.blue '1
a = green '2
a = cyan
Print a
End Sub

V prvním případě pomocí něj jen předáme hodnotu do nějaké vlastnosti. V druhém případ je to zajímavější, definuje si proměnou a jako typ barvy a ta teď bude moci nabývat hodnot konstant definovaných ve výčtovém typu barvy. Ještě je tu jedna věc, která stojí za zmínku a to:


Public Enum Cisla
  jedna = 1
  dva
  tri
  ctyri
End Enum

Private Sub Command1_Click()
  a = dva
  Print a
End Sub

Jaká se vytiskne hodnota? No jistě, že dva. Pokud by ale k jedničce byla přiřazena trojka, tak by se vytiskla 4. K výčtovým typům si více povíme hned jak se pustíme do dělání knihoven dll, komponent a podobných záležitostí. Snad už u tříd. Ale teď jde především o to, abyste přibližně věděli, o co jde a nebyli překvapeni, pokud byste něco takového v kódu viděli.

25.4 Domácí úkol

Ještě budu čekat než dostanete něco opravdu složitého. Ale kdepak, teď to přijde. A na výběr budou dvě záležitosti. Nic složitého ;) :

  1. Arkanoid – nejspíš každý víte o co jde, kdo ne, tak ať hledá. Propracujete úhly odrazu tak, aby se to dalo hrát. A očekávám i pěkné grafické provedení.
  2. Adventuru – No naprogramovat adventuru není žádný problém, pokud se do něčeho nezamotáte a kvůli nekomentovanému a nepřehlednému kódu něco nepoděláte. Tak ať to má alespoň hodinový děj.

Moc se těším na vaše výtvory, obzvláště na ty adventury.

25.5 V další lekci

Další lekce bude odpočinek. Bleskově mrkneme na pole a na funkce pro práci s řetězci. Že už jsme to dělali? No jo, pořád je, co se učit. Takže zase nové a další věcičky, které uplatníte při programování.


Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2005090105-vb-25-lekce/ ].