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.

Klepněte pro větší obrázek

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).

Klepněte pro větší obrázek

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.

Témata článku: Software, Microsoft, Programování

19 komentářů

Nejnovější komentáře

  • Petrik 16. 9. 2004 20:35:31

    Jeětě poznámka - podobně se chovají i ostatní vývojová prostředí pro...

  • Petrik 16. 9. 2004 16:58:17

    Taky zdravím - plnou cestu k EXE souboru naleznete vždy při jeho...

  • Ondřej 16. 9. 2004 15:42:30

Určitě si přečtěte

Špičkoví hackeři útočili na prohlížeče. Chrome odolal, ale Edge je tragédie

Špičkoví hackeři útočili na prohlížeče. Chrome odolal, ale Edge je tragédie

** Do Vancouveru se sjeli hackeři ** Soutěžili v útocích na prohlížeče ** Chrome odolal, ale Edge to projel na celé čáře

22.  3.  2017 | Jakub Čížek | 79

Obří Mechroboti jsou realitou, měří čtyři metry a mají hmotnost přes 1,5 tuny

Obří Mechroboti jsou realitou, měří čtyři metry a mají hmotnost přes 1,5 tuny

** Jihokorejská společnost Hankook Mirae Technology vyrábí obří Mechroboty ** Jsou určené pro ovládání člověkem uvnitř ** V prodeji se objeví koncem tohoto roku za 200 milionů korun

20.  3.  2017 | Karel Javůrek | 18

Nebuďte jako Emma Watson. Poradíme, jak nepřijít o hanbaté fotky

Nebuďte jako Emma Watson. Poradíme, jak nepřijít o hanbaté fotky

** Pokud už choulostivé snímky vyfotíte, dbejte na jejich zabezpečení ** Útočníci je nejčastěji získají z cloudového úložiště ** Pozor si dejte i na phishing a řádné zabezpečení telefonu

Včera | Stanislav Janů | 32

Google představil nový Android O. Na co se můžeme těšit?

Google představil nový Android O. Na co se můžeme těšit?

** Google vypustil vývojářskou verzi nového Androidu ** Přinese lepší notifikace nebo prodlouženou výdrž ** K uživatelům se dostane na podzim

22.  3.  2017 | Stanislav Janů | 60


Aktuální číslo časopisu Computer

Supertéma o počítačové bezpečnosti

AMD Ryzen přichází

Velké testy kinoprojektorů a levných sluchátek

Příslušenství do USB-C