Programujeme ve Visual Basic .NET - 5.díl - deklarace a inicializace

V tomto dílu seriálu o Visual Basic .NET se budeme věnovat podrobněji použití proměnných a konstant v prostředí VB.NET.

Význam a funkce deklarace

Tento díl seriálu byl na toto místo zařazen jako reakce na příspěvky čtenářů, opakovaně zdůrazňujících význam a důležitost správné deklarace proměnných používaných v kódu. Co vlastně deklarace proměnných znamená ? V dosavadních ukázkách použití proměnné probíhalo tak, že jsme v případech, že jsem potřebovali v kódu použít proměnnou, jednoduše jsme jejímu jménu přiřadili hodnotu (příklad zaslal čtenář Luděk Roleček):

Module modMain
  Sub Main
    pocetKolecek = 10
    pocetKolecek = pocetLokecek + 1
    System.Console.WriteLine(pocetKolecek)
  End Sub
End Module

Zběžným pohledem na výpis programu usoudíme, že jsem do proměnné pocetKolecek přiřadili hodnotu deset, následně ji zvýšili o jedničku a tedy příkaz WriteLine vypíše číslo jedenáct... Je tomu však takto doopravdy? Pokud si ukázku zkopírujeme třeba do editoru Visual Studio nebo Snippet Compiler (popis a konfiguraci v druhém dílu seriálu) a spustíme - ouha, konzole vypíše jedničku! Jak je to možné? Inu, ano... - už jsme na to přišli - v řádku pocetKolecek = pocetLokecek + 1 je v názvu proměnné překlep.

Problém je zde způsoben tím, že to, co považujeme za překlep nemusí za překlep považovat prostředí VB.NET. To v daném případě pouze provádí přesně to, co mu přikážeme - zde se potvrzuje úsloví o počítači jako "rychlém blbci pro třídění jedniček a nul". Naštěstí většina programovacích jazyků je schopna nás před překlepy a podobnými záludnými chybami do značné míry uchránit, stejně tak i VB.NET. A to jednoduše tak, že nás nutí předem oznámit první použití každé nové proměnné v programu. Tomu oznámení se říká deklarace (z anglického slova s latinským základem declare = "prohlásit, oznámit").

Deklarace a inicializace proměnných

V prostředí VB.NET lze deklaraci proměnné provést celou řadou způsobů, ale nejjednodušší a nejobecnější je použití příkazu Dim. Deklarace více proměnných lze současně spojovat do jednoho příkazu Dim a názvy proměnných přitom oddělovat čárkami, např.:

Dim suma
Dim incr

nebo

Dim suma, incr

V rámci deklarace je současně možné proměnné přiřadit počáteční hodnotu. Takovému přiřazení se říká inicializace (z latinského inicio = "počátek")

suma = 0
incr = 1

nebo

Dim suma = 0, incr = 1

Z funkce deklarace je zřejmé, že deklaraci proměnných musíme provést vždy před prvním použitím proměnné v kódu. K obecně platným zásadám přehledného programování patří, že deklarace pokud možno všech proměnných provedeme na začátku kódu, který je používá. Zápis úvodní ukázky s deklarací proměnné by tedy zněl:

Module modMain
  Sub Main
    Dim pocetKolecek = 10
    pocetKolecek = pocetLokecek + 1
    System.Console.WriteLine(pocetKolecek)
  End Sub
End Module

Pokud si upravenou ukázku spustíme s původním nastavení SnippetCompileru nebo Visual Studia, nic zvláštního se nestane. Pokud však zapneme kontrolu deklarace proměnných, VB.NET nám při pokusu o zkompilování ukázky oznámí chybu. V prostředí Snippet Compiler se kontrola deklarace povolí zatržením volby Option Explicit v nabídce Tools.. Options .., záložka Compiler:

V případě, že je volba Option Explicit zatržena a v kódu použijeme název proměnné, která nebyla předem deklarována (ať už úmyslně, nebo nedopatřením), Snippet Compiler příslušný řádek zvýrazní červenou vlnovkou a podrobnou informací o chybě v záložce Errors. V případě, že máme nainstalováno české prostředí .NET Framework, bude se chybové hlášení zobrazovat v českém jazyce. Najetím kurzoru myši na řádek s vlnovkou se zobrazí tooltip s bližší informací o chybě. Poklepáním na chybu v záložce Errors se kurzor klávesnice (tzv. caret) nastaví na příslušný řádek s chybou, což zjednodušuje lokalizaci chyby v případě, že se jich v kódu vyskytne více. Podobně se chovají i editory dalších vývojových prostředí VB.NET, jako Visual Studio .NET nebo SharpDevelop.

Deklarace a použití konstant

V dosavadních ukázkách programu pro výpočet obvodu kruhu se vyskytovalo použítí Ludolfova čísla π. Toto číslo představuje konstantu, která se v průběhu výpočtu nikdy nemění. V případě, že v kódu takovou konstantu vypisujeme opakovaně, patří k dobrým zásadám konstantu deklarovat stejně, jako proměnné, abychom předešli chybám pramenících z neúmyslných překlepů. VB.NET umožňuje jít v tomto směru ještě dále a zabránit, abychom deklarované proměnné omylem přiřadili v kódu novou hodnotu nebo obsah proměnné. Za tím cílem se konstanty nedeklarují příkazem Dim, nýbrž příkazem Const, který musí být vždy doprovázen inicializací. Podobně jako u příkazu Dim lze deklarace několika konstant současně spojovat čárkami:

Const iMAX = 100
Const PI = 3.1416, N = 100, sURL = ""

Aby bylo možné naše programy lehce spravovat a modifikovat, je zpravidla výhodné co největší počet číselných konstant v kódu deklarovat a přiřadit jim hodnotu na začátku programu. Tím, že si hodnotu konstanty definujeme předem (jako např. hodnotu čísla pí) se také běh programu urychlí, protože VB.NET s konstantami nemusí opakovat typové aj. kontroly. A konečně, z názvu konstant lze snáze odvodit jejich funkci - správné používání konstant tedy zásadně zlepšuje čitelnost a přehlednost kódu a je jedním ze znaků,kterým se vyznačují profesionálně sestavené programy.

Při tvorbu názvů konstant se uplatňují stejné zásady, jako pro označování proměnných, v zájmu odlišení proměnných a konstant na první pohled se však pro názvy konstant často využívají velká písmena. Jak již bylo uvedeno v předchozích dílech seriálu, prostředí VB.NET velikost písmen ignoruje - rozlišování proměnných a konstant velikostí písmen je zde čistě záležitost lepší přehlednosti a srozumitelnosti kódu.

V matematické praxi jsou nejčastěji používané hodnoty konstant Ludolfova čísla π = 3.14159265358979323846 nebo Eulerova čísla e = 2.7182818284590452354 (tvořícího základ přirozených logaritmů) definované napevno v prostředí VB.NET a lze je získat s využitím výrazů System.Math.PI a System.Math.E.

Na závěr si předvedeme ukázku deklarací a použití konstanty a proměnných na příkladu programu pro výpočet obvodu kruhu:

Module modMain
  Sub Main
    Const PI2 = System.Math.Pi * 2
    Dim r = 4, obvod = PI2 * r
    System.Console.WriteLine("Obvod :")
    System.Console.WriteLine(obvod)
  End Sub
End Module

Pokud ukázku vlepíme do editoru SnippetCompiler a spustíme, získáme v konzoli výpis výsledku s přesností přibližně na 16 platných míst.

Stručné shrnutí

Pro opakovanou práci s daty využíváme proměnné a konstanty pojmenované alfanumerickým řetězcem. Proměnné je vhodné před prvním použtím deklarovat příkazem Dim, popř. inicializovat na vhodné výchozí hodnoty - a to pokud možno na začátku kódu, který je používá. Konstanty se deklarují příkazem Const, který je vždy doprovázen inicializací.

V příštím dílu seriálu se vrátíme k předchozí ukázce a seznámíme se blíže s logickými výrazy a řídícím strukturám, které je používají.

Diskuze (22) Další článek: Soubory: HDD Temperature Pro – aby se disk neroztopil

Témata článku: , , , , , , , , , , , , , , ,