Říjen - měsíc notebooků

Programujeme ve Visual Basic .NET - 4.díl - ošetření chyb

Visual Basic .NET - zkráceně VB.NET - je jedním z programovacích jazyků pro Microsoft .NET Framework. V tomto dílu se budeme věnovat způsobům, jakým ošetřovat chyby v programu pomocí konstrukce Try - Catch - End Try a seznámíme se se způsobem použití příkazu Imports.

Ošetření chyb, konstrukce Try - Catch - End Try

V této části se vrátíme k ukázce z předchozího dílu seriálu pro výpočet obvodu kružnice na základě zadané hodnoty poloměru podle vzorce obvod = 2 π ∙ polomer:

Module modMain
  Sub Main
    System.Console.WriteLine("Program pro výpočet obvodu kruhu na základě zadané hodnoty poloměru")
    System.Console.WriteLine()
    System.Console.WriteLine("Výpočet probíhá podle vzorce Obvod = 2 * pi * polomer")
    System.Console.WriteLine("Nyní prosím zadejte hodnotu poloměru [cm]")
    polomer = System.Console.ReadLine()
    System.Console.WriteLine("Obvod kruhu [cm]:")
    System.Console.WriteLine(2 * 3.1416 * polomer)
  End Sub
End Module

Ačkoliv naše aplikace s uživatelem komunikuje dobře, dříve či později při práci s programem narazíme na skutečnost, že zhavaruje v situaci, kdy uživatel při zadávání hodnoty poloměru buďto nezadá žádné číslo (místo zadání čísla prostě stiskne klávesu Enter), nebo zadá něco, co číslem ve skutečnosti není. K tomu může dojít velice snadno - například tak, že systémové nastavení počítače předpokládá, že desetinná místa jsou oddělována tečkou, zatímco uživatel předpokládá čárku (popř. obráceně). V tom případě se obvykle zobrazuje následující ošklivý systémový dialog se hlášením o kritické chybě, kterým nám prostředí .NET sděluje, že je v koncích a že si s naší aplikací neví rady.

Z vlastní uživatelské praxe jistě víte, že podobné kritické chyby nejsou tak docela vzácné a zpravidla jsou důsledkem nějakého opominutí programátora. V praxi je totiž vždy v duchu Murphyho zákonů počítat s tím, že uživatel dokáže s programem provést něco, s čím jsme původně nepočítali...

Za účelem předcházení podobných situací jazyk VB.NET nabízí několik možností. V následující části se seznámíme s konstrukciTry - Catch - End Try, což by se dalo z angličtiny přeložit jako "Zkus - Zachyť (chybu) - Konec pokusu". Použití konstrukce je velmi jednoduché: příkazy, nebo skupinu příkazů které mohou v programu způsobít chybu zapíšeme do bloku Try, do bloku Catch příkazy, kterými tuto chybu ošetříme. Těmito příkazy může být např. informace uživateli o chybě a návod, jakým způsobem jí předejít.

Try
    sem napíšeme příkaz(y)
, které mohou způsobit chybu
    ....
Catch
    sem napíšeme příkaz(y)
, které se provedou v případě, že dojde k chybě
    ....
End Try

Poznámky:

  • Uvedené schéma je jedna z nejjednodušších příkladů použítí konstrukceTry - Catch - End Try. Později se v rámci diskuse o tzv. strukturovaném zpracování aplikačních výjimek seznámíme se způsoby jakým v bloku Catch zjistit, k jaké chybě skutečně došlo a některými rozšířenými variantami použítí Try - Catch - End Try.
  • Popsaný způsob ošetřování chyb za běhu není jediný možný. VB.NET podporuje s ohledem na zpětnou kompatibilitu se staršími verzemi Visual Basicu také tzv. nestrukturované zpracování výjimek např. s využitím příkazu On Error GoTo - Resume Next. Vzhledem k tomu, že jde o zastaralé příkazy, který lze téměř vždy konstrukcíTry - Catch - End Try nahradit, jsou uvedeny pouze pro úplnost a nebudeme se jimi dále zabývat.
  • Prostředí .NET umožňuje ošetřit veškeré chyby vzniklé na globální úrovni v tzv. systémových událostech a přiřadit jim předem definované zpracování. Tímto způsobem lze ošetřit i jakékoliv zbývající nepředpokládané zdroje chyb, které nebyly zachyceny v bloku Try - Catch. Vzhledem k tomu, že jde o sice efektivní, avšak komplexní problematiku, nebudeme se jí v této části seriálu blíže věnovat,

Praktické použití konstrukce Try - Catch - End Try v naší ukázce je následující: Jelikož při nevhodně zadané hodnotě poloměru může dojít k chybě pouze při vlastním výpočtu obvodu kružnice, provedeme jej zvlášť v bloku Try a výslednou hodnotu uložíme do pomocné proměnné obvod. Tuto hodnotu následně vypíšeme do systémové konzole:

Try
  obvod = 2 * 3.1416 * polomer
  System.Console.WriteLine("Obvod kruhu [cm]:")
  System.Console.WriteLine(obvod)
Catch

Pokud výpočet obvodu selže (ať už z důvodu, že uživatel nezadal žádné číslo, nebo vstup, který VB.NET nedokáže na použitelné číslo převést), tuto situaci zachytíme v bloku Catch a dáme uživateli najevo, že došlo k nepředpokládané situaci - tzv. výjimce při běhu programu:

Catch
  System.Console.WriteLine("Byla zadána chybná hodnota polomeru")
End Try

Výsledný program se zahrnutím výše popsaného ošetření výjimky vypadá následovně: Všimněte si způsobu odsazování příkazů v bloku Try - Catch - End Try mezerami nebo tabulátorem. Ačkoliv prostředí VB.NET mezery na začátku i konci řádků ignoruje, správně použité odsazování může výrazně zlepšit čitelnost a přehlednost programu.

Module modMain
  Sub Main
    System.Console.WriteLine("Program pro výpočet obvodu kruhu na základě zadané hodnoty poloměru")
    System.Console.WriteLine()
    System.Console.WriteLine("Výpočet probíhá podle vzorce Obvod = 2 * pi * polomer")
    System.Console.WriteLine("Nyní prosím zadejte hodnotu poloměru [cm]")
    polomer = System.Console.ReadLine()
    Try
      obvod = 2 * 3.1416 * polomer
      System.Console.WriteLine("Obvod kruhu [cm]:")
      System.Console.WriteLine(obvod)
     Catch
      System.Console.WriteLine("Byla zadána chybná hodnota poloměru")
    End Try
  End Sub
End Module

Naše aplikace nyní funguje tak, že - pokud nezadáme použitelnou hodnotu poloměru, popř. jej nezadáme vůbec - program tuto skutečnost oznámí a ukončí se bez vypsání výsledku. Nyní již bude pro uživatele velmi obtížné náš program "shodit" zadáním nepoužitelné vstupní hodnoty. Později se seznámíme s možnostmi, jak chybně zadanou vstupní hodnotu zpracovat a ošetřit tak, aby uživatel získal možnost ji opravit znovu, popř. jak určitou hodnotu uživateli nabídnout jako výchozí (tzv. default).

Stručné shrnutí

Seznámili jsme se s důležitou oblastí programování - zpracování výjimek při běhu programu, ke kterým může dojít např. v důsledku chybně zadaných vstupních hodnot. Zpracování výjimek jsme si prakticky demonstrovali na příkladu použití konstrukce Try - Catch - End Try. V další části se seznámíme s dalšími řídícími strukturami VB.NET - logickými výrazy a příkazem podmínky If - Then.

Živě je díky vašim hlasům ve finále ankety Křišťálová Lupa. Podpořte nás prosím ještě v závěrečném kole. Děkujeme!


Sledujte Živě na Facebooku

celkem 19

Poslední komentáře Komentáře

Jeětě poznámka - podobně se chovají i ostatní...

Petrik 16.  9.  2004 20:35

Taky zdravím - plnou cestu k EXE souboru...

Petrik 16.  9.  2004 16:58

Ondřej 16.  9.  2004 15:42

Tohle je spíš didaktická ukázka tvorby...

Petrik 15.  9.  2004 20:22

Ehm, pokud sem nalinkuji nějaké HTML s tagem...

Petrik 15.  9.  2004 20:02
Přidat příspěvek Zobrazit vše


Další podobné články

Proč Windows 10 a ne 9? Zřejmě kvůli Windows 95 a 98

Proč Windows 10 a ne 9? Zřejmě kvůli Windows 95 a 98

Před 1 hodinou  |  Polesný David  |  3
Fotosmršť: Windows 10 Technical Preview

Fotosmršť: Windows 10 Technical Preview

Windows 10 Technical Preview je už k dispozici pro každého zájemce na webu Microsoftu. Pojďme si tedy prohlédnout jeho současnou podobu na snímcích toho nejdůležitějšího.

Před 12 hodinami  |  Čížek Jakub  |  21

Video: Zapomeňte na Metro. Teď to bude Continuum

Video: Zapomeňte na Metro. Teď to bude Continuum

Včera  |  Čížek Jakub  |  17
První oficiální obrázky Windows 10

První oficiální obrázky Windows 10

30.  9.  2014  |  Čížek Jakub  |  23
Windows 10 TP bude k dispozici během několika příštích hodin

Windows 10 TP bude k dispozici během několika příštích hodin

30.  9.  2014  |  Čížek Jakub  |  25
Microsoft představil Windows 10
TIP!

Microsoft představil Windows 10

Den premiéry nové verze operačního systému Windows je tady. Mnoho detailů už známe předem, ostatní podstatné informace bychom se měli dozvědět dnes. Sledujte od 19:00 online!

30.  9.  2014  |  Polesný David  |  57


DEJTE NÁM TIP NA ČLÁNEK

Živě je díky vašim hlasům ve finále ankety Křišťálová Lupa. Podpořte nás prosím ještě v závěrečném kole. Děkujeme!



Aktuální číslo časopisu Computer
  • Testy nejnovějších produktů na českém trhu.
  • Informace ze světa internetu i bezpečnosti.
  • Plné verze programů zdarma pro všechny čtenáře.

Partnerská sekce pro IT profesionály
Microsoft TechNet/MSDN