Začátečník

Pokročilý

Profesionál

Úvod do světa .NET /7. díl

Moderní technologie vývoje softwaru

 

Budete potřebovat přibližně 95 minut

Operační systém použitý v příspěvku: Windows 2000

Vývojové nástroje: Visual Basic .NET

 

 

Vážení programátoři,

 

nabídka červencového dílu seriálu bude vskutku bohatá. Nejprve se podíváme na některá pravidla, které byste měli dodržovat při pojmenovávání proměnných jak hodnotových, tak i referenčních datových typů. Dále vzpomeneme využití komentářů a jejich smysl při dokumentaci zdrojového kódu. Ve finále se můžete těšit na vysvětlení pojmů funkce, argument a parametr. Rovněž dojde i na ozřejmění dvou základních způsobů předávání argumentů. Příjemné počtení.

 

Obsah

Zásady pro pojmenovávání proměnných

Komentáře a jejich smysl v procesu dokumentace zdrojového kódu

Jak změnit standardní barvu komentářů

Charakteristika pojmu funkce

Deklarace funkce ve VB .NET

Charakteristika pojmů argument a parametr

Charakteristika způsobu předávání argumentů

Praktická ukázka použití funkce

 

 

Zásady pro pojmenovávání proměnných 

 

I když by se mohlo na první pohled zdát, že problematika správného pojmenování proměnných je, ve srovnání s jinými programátorskými oblastmi, poněkud méněcenná, není tomu tak. Dokonce lze říci, že pokud programátor ovládne ty správné návyky v určování názvosloví proměnných, získá nejenom značný přehled o situaci ve svém zdrojovém kódu, ale bude rovněž dostatečně připraven pro profesionální práci v programátorském týmu.

 

Na začátek si uveďme několik „dobrých rad“, které můžete při pojmenovávání proměnných vhodně využít.

 

  1. Jméno proměnné nesmí začínat číslicí, protože Visual Basic .NET tuto skutečnost přímo zakazuje. Mimochodem, podobné pravidlo zastávají také jiné programovací jazyky. Na druhé straně třeba připomenout, že i když se číslice nemůže nacházet na samém počátku jména proměnné, na jiné pozici v názvu není její přítomnost zakázána.

 

Příklady:

 

        Dim 123Objednávka as Short

        'nepovolené pojmenování proměnné

 

        Dim Objednávka123 As Short

  'přípustné pojmenování proměnné

 

  1. Jménem proměnné nesmí být žádné klíčové slovo Visual Basicu .NET. I kdyby deklarace takovéto proměnné proběhla bez problémů, záhy po spuštění programu byste obdrželi nesprávné výsledky a další chyby.

 

  1. Jméno proměnné může začínat písmenem (malým nebo velkým) a také znakem podtržení (_).

 

Příklady:

 

        Dim Název As String

        Dim výpočet As Double

        Dim _Proměnná As Integer

 

  1. Jméno proměnné by mělo být co možná nejvýstižnější a rovněž tak i nejkratší. Vždy se snažte přiřadit proměnné název, který tvoří co nejméně znaků, resp. volte vždy nejkratší kombinaci znaků a číslic. I když ve skutečnosti VB .NET nijak nestanovuje maximální délku proměnné, zkuste se vyhnout názvům delším nežli 32 znaků.

 

  1. Při studiu cizího programového kódu se můžete střetnout s několika způsoby pojmenovávání proměnných. Poměrně často je název proměnné složen ze dvou (nebo i více) slov, z kterých každé začíná velkým písmenem abecedy:

 

        Dim PočetVýrobků As Integer

        Dim KoeficientInflace As Single

 

         Druhá varianta spočívá v častém použití znaku podtržení (_):

        

        

        Dim Obsah_kruhu As Integer

        'nebo také

        Dim Obsah_Kruhu As Integer 

        

Ovšem vezměte prosím v potaz, že z posledních dvou příkladů pojmenování proměnné může být v jedné lokální oblasti (proceduře, funkci, metodě) použit jenom jeden z nich. Protože VB .NET nepatří mezi programovací jazyky, které by rozlišovali malá a velká písmena, považoval by deklaraci druhé proměnné za chybnou (jde o chybu tzv. duplicitní deklarace proměnné).  

 

  1. Ve světě programování byla otázka vhodného pojmenování proměnných vždy předmětem zájmu mnoha vědců a odborníků. Jedním z průkopníků byl také Američan maďarského původu Charles Simonyi, který vytvořil takzvanou maďarskou notaci. Hlavní smysl této notace tkví v přidání speciálního prefixu před jménu proměnné. Jednoduše, před jméno každé proměnné byla umístěna předpona, která identifikovala datový typ té-které proměnné. Ukažme si příklady:

 

        Dim intDeterminant As Integer

        Dim strSlogan As String

 

Prefix býval zvyčejně třípísmenný a spolehlivě charakterizoval příslušnost proměnné k vybranému datovému typu. V uvedených příkladech prefix int říká, že proměnná je datového typu Integer a předpona str zase identifikuje proměnnou datového typu String.  

 

Maďarská notace byla velice populární především při programování v jazycích C a C++, později se ovšem také dostala i do prostředí Visual Basicu. Mnoho programátorů se s ní sžilo natolik, že ji používají dodnes.

  

  1. Nakonec jsem si nechal jedno staré, ovšem léty prověřené pravidlo: V podstatě nezáleží na tom, jaký způsob pojmenovávání proměnných si vyberete. Důležité je, abyste vybraný styl pojmenovávání proměnných povýšili na standard, který budete v každém případě dodržovat.

 

 

Komentáře a jejich smysl v procesu dokumentace zdrojového kódu

 

Visual Basic .NET poskytuje programátorům již hodně dlouho možnost zařadit do kódu také řádky ryze informačního charakteru, kterým se říká komentáře. Ve výpisech programových kódů jsem už komentáře někdy používal, takže jste se s nimi již mohli střetnout. Komentář můžete do vašeho kódu zařadit velmi jednoduše:

 

  1. Vložte do kódu znak apostrofu (‘) a zapište informační text:

 

        Dim CenaVýrobku As Single

        'Právě byla deklarována proměnná datového typu Single.

 

Vše, co se objeví za znakem apostrofu považuje VB .NET za komentář. Komentář poznáte lehce podle jeho zelené barvy.

 

Informační text komentáře může být uveden nejen znakem apostrofu, ale také textovým řetězcem REM. Ve chvílích, kdy nebudete chtít hledat správnou klávesu pro vložení apostrofu, vám možná zapsání formulky REM ušetří drahocenný čas.

 

Pokud by vám standardní barva komentáře nevyhovovala, můžete ji změnit. Více informací si můžete přečíst v kapitole Jak změnit standardní barvu komentářů.  

 

Při práci s komentáři si musíte pamatovat, že systém komentářů je založen na řádkovém schématu. To znamená, že po vložení apostrofu je celý řádek vyhrazen jenom pro komentář. Když do takového řádku vložíte programový kód, tento nebude proveden, protože Visual Basic .NET bude přepokládat, že jde o komentář. Komentář se samozřejmě může rozkládat také na více řádcích. V tomto případě se ale musí na začátku každého řádku nacházet znak apostrofu. Podívejte se na následující ukázku:

 

        MessageBox.Show("Tento text se zobrazí v okně se zprávou.")

        'Metoda Show

        'třídy MessageBox

        'zabezpečí zobrazení okna se zprávou.  

 

Velmi důležitá je skutečnost, že při kompilaci zdrojového kódu aplikace komentáře zbytečně nezdržují práci překladače, nakolik tento je ignoruje. Není tedy pravdou tvrzení, že čím víc komentářů v kódu používáte, tím je váš kód prováděn pomaleji.

 

Implementace komentářů do programového kódu vaší aplikace je velmi důležitá. Pokud budete schopni vhodnou formou dokumentovat činnost vašeho kódu, vytvoříte si pevnou základnu pro pozdější modifikaci a rozšiřování funkčnosti aplikace. Přitom bude dobré, když budete komentovat jak jednoduché sekvence, tak i složité vnořené partie programového kódu. Úsilí, které vynaložíte na tvorbu komentářů, se vám vrátí i s pomyslnými úroky ve chvíli, když se k předmětnému kódu vrátíte po půlroce, nebo i delší době.

 

Značné množství programátorů začátečníků propadá dojmu, že kódu, který napíšou dnes, budou rozumět kdykoliv. Když se tito programátoři po delší době vrátí k vlastnímu zdrojovému kódu, jenom s hrůzou budou nahlížet na komplikované programovací konstrukce, na pochopení kterých budou potřebovat dodatečný čas. Kdyby ovšem svůj kód pečlivě dokumentovali, tento dodatečný čas mohli využít daleko smysluplněji.   

 

Význam komentářů ještě vzrůstá při studiu cizího zdrojového kódu. Věřte, že přijít na to, jak myslel jiný programátor při psaní té-které funkce či procedury, je někdy podstatně těžší, jako napsání své vlastní procedury nebo funkce.

 

Pokud vyvíjíte uživatelský ovládací prvek nebo komponentu, kterou pak poskytnete jiným vývojářům bezplatně, nebo ji budete nabízet na trhu softwarových součástí, měli byste dokumentační systém rozšířit o kompletní elektronickou dokumentaci ve formě nápovědy. V případě ovládacího prvku by nápověda měla obsahovat popis všech tříd (bázových i abstraktních), rozhraní, metod a vlastností.

 

Návrh ovládacích prvků by měl vyhovovat základním principům objektově orientovaného programování (OOP). Jedním z těchto principů je takzvané zapouzdření (encapsulation). Zapouzdření říká, že klientský kód by měl s ovládacím prvkem komunikovat jenom prostřednictvím jeho rozhraní (tedy voláním příslušných metod a využíváním vstavěných vlastností). Samotné jádro implementace ovládacího prvku by ale nikdy nemělo být přístupné klientské aplikaci. Z tohoto důvodu se cizí programátor nikdy nedostane ke komentářům zdrojového kódu ovládacího prvku.  

 

  

Jak změnit standardní barvu komentářů

 

Nejste-li spokojeni se zelenou barvou komentářů, připravil jsem pro vás postup, jak tuto barvu modifikovat a změnit podle vašich požadavků. Postupujte podle následujících instrukcí:

 

  1. Vyberte nabídku Tools a klepněte na položku Options.
  2. V objevivším se dialogovém okně klepněte na složku Environment a vyberte položku Fonts and Colors.
  3. V seznamu Display items vyhledejte položku Comment.
  4. Z otevíracího seznamu Item foreground vyberte barvu pro komentáře.

 

Jestliže vás ani nabídka barev otevíracího seznamu Item foreground nepotěšila, klepněte na tlačítko Custom a vyberte si vlastní barvu z barevného spektra RGB.

 

 

Charakteristika pojmu funkce

 

Věřím, že funkcím přijdete rychle na chuť, protože pod pojmem funkce si můžete představit metodu, která vrací jistou hodnotu. Právě schopnost vracet hodnotu dělá z obyčejné metody pravou a nefalšovanou funkci. Hodnota, kterou funkce vrací, se nazývá návratová hodnota funkce. Hlavní rozdíl mezi metodou a funkcí je následující:

 

 

 

Obr. 1 – Činnost práce metody

 

 

 

Obr. 2 – Činnost práce funkce

 

 

Deklarace funkce ve VB .NET

 

Nejdříve se podívejme na ukázkovou deklaraci funkce, a poté si povíme, z čeho se deklarační příkaz funkce skládá:

 

    Public Function Moje_Funkce(ByVal číslo As Short) As Integer

 

        Dim Druhá_Mocnina As Integer

        Druhá_Mocnina = číslo * číslo

        Return Druhá_Mocnina

 

    End Function

 

Deklarační příkaz pro vytvoření funkce pozůstává z těchto hlavních součástí:

 

Modifikátor přístupu určuje úroveň, na které bude funkce přístupná. Jinými slovy, pomocí modifikátoru přístupu můžete určit, zdali bude funkce veřejná (Public), a tak přístupná z celého projektu, nebo naopak soukromá (Private). Soukromá funkce je přístupná pouze v rámci vyššího programového bloku, v kterém je deklarována (tímto blokem může být například třída). Kromě modifikátorů Public a Private existují ještě další (Protected, Friend a Protected Friend), ovšem těmi se v této chvíli nebudeme zabývat.

 

Tento příkaz musí následovat ihned za specifikací modifikátoru přístupu. Příkaz říká Visual Basicu, že budete chtít vytvořit funkci. Protějškem příkazu Function je příkaz End Function. Tyto dva příkazy ohraničují takzvané tělo funkce. Tělem funkce se proto rozumí všechny řádky programového kódu, které se nacházejí mezi příkazy Function a End Function. 

 

Název funkce představuje uživatelsky přívětivé pojmenování funkce (v našem případe je názvem funkce řetězec Moje_Funkce). Zvolený název funkce budete používat vždy, když budete chtít funkci zavolat.

 

Pod pojmem signatura funkce se rozumí seznam parametrů funkce, který je umístěn v kulatých závorkách. Jestliže signatura funkce obsahuje víc jak jeden parametr, jsou parametry od sebe odděleny čárkami. Signatura funkce nemusí také obsahovat žádný parametr, ovšem i v tomto případě je použití kulatých závorek povinné. V našem příkladě tvoří signaturu funkce jenom jeden parametr datového typu Short s názvem číslo. Bližší pohled na parametry a argumenty můžete najít v kapitole Charakteristika pojmů argument a parametr.

 

Jak již víte, funkce po vykonání své práce vrací návratovou hodnotu. V deklaračním příkazu je potřebné determinovat datový typ návratové hodnoty funkce. Určení návratové hodnoty funkce se uskuteční zapsáním klíčového slova As za signaturu funkce a přidáním názvu platného datového typu. Z deklarace naší funkce je zřejmé, že funkce bude vracet celočíselnou hodnotu typu Integer. Vrácení hodnoty má na starosti příkaz Return. Vše, co se nachází za tímto příkazem tvoří návratovou hodnotu funkce (v našem případě jde o hodnotu proměnné Druhá_Mocnina).   

 

Naše funkce (Moje_Funkce) pracuje v několika krocích. Abyste ovšem byli schopni opravdu pochopit skutečnou činnost funkce, musíme si nejprve ozřejmit pojmy argument a parametr.

 

 

Charakteristika pojmů argument a parametr

 

Pojmy argument a parametr jsou ve světě programování velice důležité, a proto bude dobré, když budete jejich studiu věnovat více času. Argumentem se rozumí hodnota, která je poskytnuta funkci jako jakási „vstupní surovina“. Aby ovšem funkce mohla tuto hodnotu přijmout a uchovat, musí disponovat parametrem, neboli proměnnou, do které se přijímaná hodnota uloží. Vztah mezi argumentem a parametrem je znázorněn na obr. 3.

 

 

Obr. 3 – Ilustrace vztahu argumentu a parametru

 

 

Charakteristika způsobu předávání argumentů

 

Visual Basic .NET podporuje dvě varianty předávání argumentů:

 

Při předávání argumentů hodnotou je volané funkci poskytnuta jenom kopie skutečného argumentu. Funkce tak pracuje pouze s kopii skutečného argumentu a i když argument změní, tato změna bude pouze lokální a nijak neovlivní skutečný argument. Jestliže budete chtít, aby byl argument funkci předán hodnotou, před název parametru, jenž bude přijímat tento argument, dodáte klíčové slovo ByVal. Použití tohoto klíčového slova při předávání argumentů hodnotou ovšem není povinné, protože VB .NET implicitně předává všechny argumenty hodnotou. Když tedy před jméno přijímacího parametru nepřidáte klíčové slovo ByVal, nic se neděje, stejně bude argument předáván hodnotou. Zapsání klíčového slova ByVal ale zpřehledňuje kód a vizuálně vás informuje o způsobu předávání argumentů.  

 

Na druhé straně se můžete střetnout také s předáváním argumentů odkazem. V tomto případě je volané funkci poskytnut skutečný argument. Přesněji, funkci je dodán ukazatel na paměťovou adresu, na které se skutečný argument nachází. Když funkce získá přístup ke skutečné hodnotě, může ji také lehce modifikovat podle svých požadavků. Když budete chtít, aby byl parametru funkce předán argument odkazem, před jméno parametru přidejte klíčové slovo ByRef. Předávání argumentů odkazem je velmi užitečná technika, která se využívá také při některých pokročilých programovacích postupech.

 

 

Praktická ukázka použití funkce

 

V této praktické studii si ukážeme, jak volat funkci z volající procedury. Postupujte takto:

 

  1. Vytvořte novou aplikaci pro Windows (Windows Application).
  2. Na formulář přidejte jedno tlačítko, které nechte implicitně pojmenované.
  3. Poklepejte na tlačítko, čím zobrazíte editor pro zápis kódu. Za příkaz End Sub událostní procedury Button1_Click vložte prázdný řádek a zadejte následující programový kód pro funkci Moje_Funkce:

 

    Public Function Moje_Funkce(ByVal číslo As Short) As Integer

        Dim Druhá_Mocnina As Integer

        Druhá_Mocnina = číslo * číslo

        Return Druhá_Mocnina

    End Function

 

 

  1. Do událostní procedury Button1_Click vložte tento řádek kódu:

 

        

         MessageBox.Show(Moje_Funkce(100).ToString)

 

Jednotlivé části deklarace funkce Moje_Funkce jsme si již objasnili. V této chvíli se zaměřte na parametr funkce s názvem číslo. Jak vidíte, před jménem parametru je uvedeno klíčové slovo ByVal, které indikuje, že argument, který bude parametr přijímat, bude předáván hodnotou. Parametr bude tedy obsahovat jenom kopii skutečné hodnoty. A jakáže hodnota bude parametru předaná? Bude to hodnota, která je poskytnuta funkci při jejím zavolání z volající procedury. Když se podíváte na kód událostní procedury Click tlačítka Button1, uvidíte, že funkci je poskytnuta celočíselná hodnota 100.

 

Pojďme ovšem dál a podívejme se blíže na algoritmus práce funkce.

 

Poté, co je funkci dodána hodnota 100, je kopie této hodnoty (resp. tohoto argumentu) umístěna do parametru číslo. Protože je parametr deklarován jako proměnná datového typu Short, jehož rozsah tvoří uzavřený interval <-32,768, 32,767>, je vše v pořádku a kopie argumentu může být úspěšně uložena do proměnné číslo. Kdybyste ovšem překročili povolený rozsah datového typu, program by nepracoval správně a střetli byste se s chybou za běhu programu.  

 

V okamžiku, kdy parametr funkce obsahuje kopii skutečné hodnoty, je tato kopie použita k další operaci, kterou je vypočtení její druhé mocniny. Výsledek součinu je posléze uložen do lokální proměnné s názvem Druhá_Mocnina. Ve finálním kroku je vypočtená druhá mocnina argumentu vrácena pomocí příkazu Return volající událostní proceduře Button1_Click. Vrácená hodnota je nakonec zobrazena v okně se zprávou, které je zobrazeno prostřednictvím metody Show třídy MessageBox. 

 

 

Ján Hanák