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í, Visual, Resume, Systémový program, Kritická část, Jednoduchý vzorec, Chyba, Catch, Blok, Popsaný způsob, Kritická situace

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

Tesla chce změnit nákladní dopravu. Její elektrický náklaďák má ohromující parametry

Tesla chce změnit nákladní dopravu. Její elektrický náklaďák má ohromující parametry

** Tesla představila elektrický kamion ** Má obdivuhodný výkon i dojezd ** Prodávat by se měl už za dva roky

Včera | Vojtěch Malý | 123

30 počítačových brzd, které vám zpomalí Windows

30 počítačových brzd, které vám zpomalí Windows

Na webu najdete hromadu rad, jak zrychlit počítač a Windows. My jsme na to šli opačně a naopak jsme hledali činnosti, které ho nejvíce zpomalují. Toto je třicítka těch základních.

12.  11.  2017 | Jakub Čížek | 90

Elektronika, která nepotřebuje kabel ani baterii. Živí se rádiovým šumem

Elektronika, která nepotřebuje kabel ani baterii. Živí se rádiovým šumem

** Každá elektrická krabička má konektor pro napájení nebo baterii ** Jenže pozor, jednou by to tak nemuselo být ** Drobná elektronika se může živit rádiovými vlnami

14.  11.  2017 | Jakub Čížek | 15


Aktuální číslo časopisu Computer

Otestovali jsme 5 HDR 4K televizorů

Jak natáčet video zrcadlovkou

Vytvořte si chytrou domácnost

Radíme s koupí počítačového zdroje