|
Začátečník |
Pokročilý |
Profesionál |
|||||
|
|
|
||||||
Prostor
pro experimentování Programátorská laboratoř |
||||||||
|
|
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 |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Aktivace optimalizace
kompilátora
Pokud pracujete ve VB .NET, tento typ bude pro vás zcela jistě užitečný. Každý programátor se jednou dostane do situace, kdy zatouží po rychlejším provádění svého programové kódu. Jak možná víte, čas strávený pečlivým studiem kódu a promýšlením, jak zefektivnit tu či onu proceduru nebo funkci, bývá leckdy neúnosně dlouhý. Jestliže patříte do skupiny programátorů, kteří by pro optimalizaci kódu udělali takřka všechno, vyzkoušejte následující postup:
Obr. 1 – Zapnutí optimalizace kompilátora v okně Property
Pages
Jakmile v budoucnu vydáte příkaz na sestavení aplikace .NET, kompilátor použije různá optimalizační nastavení. Při své práci se bude snažit, aby vygenerovaný výstup byl kapacitně méně náročný, rychlejší a efektivnější.
|
Protože kompilátor při své práci může v zásadní míře změnit
strukturu programového kódu na úrovni jazyka MSIL, můžete mít po sestavení
aplikace se zapnutou optimalizací kompilátoru problémy s pozdějším dalším
odlaďováním této aplikace. Proto se doporučuje, abyste automatickou
optimalizaci kompilátoru používali jenom pro plně odladěnou aplikaci, která
je generována v režimu Release. |
Ačkoliv se jedná o automatickou optimalizaci, je možné, že v některých případech dosáhnete navýšení výkonu vaší aplikace. Neměli byste ovšem očekávat, že zapnutí uvedené optimalizační volby zcela nahradí komplexní proces pečlivé kontroly a „manuální“ optimalizace programového kódu vaší aplikace.
Použití volitelných (optional) parametrů
Pod pojmem volitelný parametr se rozumí parametr v signatuře funkce nebo procedury Sub, který je uveden klíčovým slovem Optional. Pro volitelné parametry platí následující pravidla:
Dobrá, tolik říká teorie a teď se podívejme, jak vypadá deklarace volitelných parametrů v praxi. Postupujte dle těchto instrukcí:
Private Function Propočet _
(ByVal cena
As Single, _
Optional ByVal množtví As
Integer = 10) As Single
MessageBox.Show((cena
* množtví).ToString)
End Function
Jde o soukromou funkci, která vypočítává cenu obstarání nějaké komodity. Funkce pracuje se dvěma parametry. Prvním parametrem je cena výrobku v podobě datového typu Single. Druhý parametr představuje nakoupené množství výrobků a jak si můžete všimnout, jde o volitelný parametr, kterého datový typ je Integer. Jak již víte, volitelný parametr musí být inicializován (zde na hodnotu deseti kusů výrobků). Výsledkem práce funkce je výpočet celkové ceny obstarání, která se posléze zobrazí v dialogovém okně.
Call Propočet(100.5)
V případě, že nezadáte množství výrobků, které jste nakoupili, použije se standardní množství (10 ks). Takto by vás celý nákup stál rovných 1005 korun. Jestliže budeme abstrahovat od obchodních záležitostí a budeme se soustředit jenom na programový kód, můžeme říct, že právě toto je hlavní úkol volitelného parametru. Když totiž není zadána hodnota druhého parametru, použije se předem stanovená hodnota, což ušetří trochu námahy při psaní signatury funkce. Pokud však chcete, můžete hodnotu druhého parametru změnit, třeba na 20:
Call Propočet(100.5,
20)
|
Při zápisu hodnoty druhého parametru vám opět pomůže technologie
IntelliSense a poví vám, že druhý parametr je volitelný a rovněž zobrazí i
jeho konstantní hodnotu. Jenom připomenu, že volitelnost druhého parametru je
v popisku indikována přítomností hranatých závorek (viz obrázek). |
Jak zjistit, zdali byla stisknuta klávesa Enter
Zjistit, zdali byla aktivována klávesa Enter, lze poměrně jednoduše pomocí následujícího kódu:
Private Sub TextBox1_KeyPress(ByVal sender As Object,
_
ByVal e As System.Windows.Forms.KeyPressEventArgs)
_
Handles
TextBox1.KeyPress
If e.KeyChar = Microsoft.VisualBasic.ChrW(13)
Then
MessageBox.Show("Byla aktivována klávesa ENTER.")
End If
End Sub
V uvedeném výpisu se předpokládá, že na formuláři se nachází textové pole s názvem TextBox1. A jak pracuje uvedený kód? Skutečnost, zdali byla požadovaná klávesa stisknuta či nikoliv, budeme testovat v obsluze události KeyPress textového pole. K události KeyPress dojde vždy, když uživatel stiskne klávesu, která disponuje příslušným ASCII kódem. Mezi takovéto klávesy patří alfabetické a numerické klávesy, podobně jako i některé jiné klávesy (jako je např. klávesa Enter). Aby bylo možno rozeznat, která klávesa byla stisknuta, můžeme testovat hodnotu vlastnosti KeyPressEventArgs.KeyChar. Na identifikaci klávesy Enter použijeme funkci ChrW. Této funkci jako parametr předáme ASCII kód klávesy Enter, který je reprezentován číselnou hodnotou 13. Vždy, když uživatel zapíše do textového pole několik znaků, testujeme, zdali ASCII kód zadaného znaku neodpovídá ASCII kódu klávesy Enter. Je-li tomu tak, zobrazí se dialogové okno se zprávou, která říká, že byla zmáčknuta hledaná klávesa.
Ukázka práce strukturované správy chyb
VB .NET přichází s novinkami také v oblasti ošetřování chyb a odlaďování programů. Střetáváme se zde s tzv. strukturovanou správou chyb, podstatu které si ihned vysvětíme. Jestliže máte zkušenosti s VB 6.0, bude pro vás lepší, když budou představeny oba systémy správy chyb (tak ve VB 6.0, jako i ve VB .NET) a vy budete moci porovnat prezentované rozdílnosti.
Pokud jste chtěli ve VB 6.0 vložit do funkce nebo procedury chybovou rutinu, ve většině případů programový kód této chybové rutiny vypadal asi takto:
Private
Sub btn1_Click()
On
Error GoTo Napravit_chybu
Dim
x As Integer, y As Integer
x = 1000
y = 0
Me.Caption = x \ y
Exit
Sub
Napravit_chybu:
MsgBox "Tuto operaci nelze provést."
End Sub
V příkladě můžete pozorovat autorovu snahu o vyvolání chyby č. 11 s názvem Division by zero (Dělení nulou). Protože takováto operace je z matematického hlediska nepřípustná, vyskytne se chyba. Aby jsme mohli chybu tohoto typu ošetřit, vkládáme do programového kódu konstrukci On Error Goto Návěstí, kde Návěstí představuje tu sekci kódu, která se má provést v případě, že dojde v programu k chybě. Když se vrátíme k uvedenému kódu, uvidíme, že název Návěstí je Napravit_chybu. Můžeme tedy říci, že vždy, když dojde v této událostní proceduře k chybě, exekuce programu bude pokračovat prováděním kódu, jenž je umístěn pod názvem Návěstí (tedy pod řetězcem Napravit_chybu).
Pojďme se nyní podívat na to, jaká je situace v tomto směru ve VB .NET. Pro analogii použijeme již uvedenou podobu programového kódu (i když samozřejmě uzpůsobenou pro novou verzi jazyka) a budeme pozorovat rozdíly.
Private Sub btn2_Click(ByVal sender As System.Object,
_
ByVal e As System.EventArgs)
Handles btn2.Click
Try
Dim
x, y As Integer
x = 1000
y = 0
Me.Text = x \ y
Catch
MessageBox.Show("Tuto
operaci nelze provést.")
End Try
End Sub
Zde máte možnost vidět ukázku práce moderní strukturované správy chyb. O co vlastně jde? Zjednodušeně lze prohlásit, že všechen kód, o kterém si myslíme, že by mohl způsobit jakoukoliv chybu, umístíme do bloku Try. V bloku Try dále vytvoříme jeden (nebo i několik) bloků Catch. Blok Catch obsahuje programový kód pro ošetření vzniklé chyby. Když tedy dojde k chybě, exekuce programu se přenese do bloku Catch a provede se ten kód, jenž se v daném bloku nachází (přesněji dojde k zobrazení chybového hlášení pomocí třídy MessageBox). Celou chybovou rutinu uzavírá příkaz End Try.
|
Jenom pro zajímavost připomenu, že i v prostředí jazyka VB .NET
můžete používat starší (nestrukturovanou) správu chyb prostřednictvím konstrukce
On Error Goto Návěstí. Přestože je tento způsob ošetřování chyb stále
podporován, měli byste dát přednost nové koncepci psaní chybových rutin. |
Tvorba kontextové nabídky klonováním
Náplní poslední programové ukázky bude zhotovení kontextové nabídky klonováním jedné z nabídek hlavního menu programu. Přitom tak hlavní nabídku, jako i kontextuálně vázanou nabídku vytvoříme pomocí programového kódu. Podívejte se nejprve na samotný kód a pak si k němu řekneme pár slov.
Dim hlavní_nabídka As
New MainMenu()
Dim
nabídka1 As New MenuItem()
nabídka1.Text = "Nabídka č.1"
hlavní_nabídka.MenuItems.Add(nabídka1)
nabídka1.MenuItems.Add("Položka
č.1")
Me.Menu = hlavní_nabídka
Dim kontextová_nabídka As New ContextMenu()
kontextová_nabídka.MenuItems.Add(nabídka1.CloneMenu())
TextBox1.ContextMenu = kontextová_nabídka
V první řadě je potřebné vytvořit novou hlavní nabídku (hlavní_nabídka). Dále vytvoříme jednu parciální nabídku (nabídka1), kterou posléze přidáme do hlavní nabídky. Do právě vytvořené parciální nabídky přidáme pomocí metody Add jednu položku. Nakonec určíme, že hlavní nabídka se má stát právoplatnou nabídkou aktivní instance formuláře.
Naše další úsilí je spojené s tvorbou kontextuálně vázané nabídky (s názvem kontextová_nabídka). Právě v této chvíli se dostáváme k zlatému hřebíku představení, kterým je aplikace metody CloneMenu. Tato metoda vytváří přesnou kopii parciální nabídky nabídka1 (a všech součástí této nabídky). Kopie je následně přiřazena kontextové nabídce. Poslední řádek pak determinuje, že vytvořená kontextová nabídka se bude vztahovat na požadovanou instanci ovládacího prvku TextBox.
Pro praktické vyzkoušení práce programového kódu můžete na formulář umístit jednu instanci ovládacího prvku Button a rovněž jednu instanci ovládacího prvku TextBox. Událostní proceduru Click tlačítka vyplňte uvedeným kódem a spusťte testovací aplikaci. Klepněte nejdříve na tlačítko. Uvidíte, že se vytvoří hlavní nabídka, parciální nabídka a jedna položka této nabídky. Když klepněte pravým tlačítkem myši na instanci ovládacího prvku TextBox, objeví se kontextová nabídka, která vznikla klonováním (obr. 2).
Obr. 2 – Kontextová nabídka vytvořená klonováním
Ján Hanák