Lekce 12: Výjimky a práce s chybami v C# – Efektivní zpracování chybových stavů

Lekce 12: Výjimky a práce s chybami v C# – Efektivní zpracování chybových stavů

V každé aplikaci může dojít k situacím, kdy se něco pokazí. Výjimky jsou mechanismus, který umožňuje efektivní zpracování chyb a neočekávaných situací během běhu programu. V jazyce C# poskytuje práce s výjimkami robustní způsob, jak zvládat chyby, aniž by došlo k pádu aplikace. V této lekci se naučíme základní pojmy výjimek, jak je vyvolávat, zpracovávat, a jak používat bloky try, catch, finally, a vlastní výjimky.


1. Co je výjimka?

Výjimka je speciální událost nebo objekt, který signalizuje výskyt chyby nebo jiné neobvyklé situace během běhu programu. Pokud dojde k výjimce, běžné provádění kódu se zastaví a řízení přejde do nejbližšího bloku pro zpracování výjimky.

Typické příklady výjimek:

  • Pokus o dělení nulou (DivideByZeroException)
  • Přístup k neexistujícímu prvku v poli (IndexOutOfRangeException)
  • Chyby při práci se soubory, jako je chybějící soubor (FileNotFoundException)

2. Blok try-catch

Blok try-catch je základní mechanismus pro zpracování výjimek. Kód, který může způsobit výjimku, je uzavřen do bloku try, a chyby se zpracovávají v jednom nebo více blocích catch.

Syntaxe:

try
{
// Kód, který může způsobit výjimku
}
catch (TypVýjimky e)
{
// Zpracování výjimky
}

Příklad:

try
{
int delitel = 0;
int vysledek = 10 / delitel; // Vyvolá DivideByZeroException
}
catch (DivideByZeroException e)
{
Console.WriteLine("Chyba: Nelze dělit nulou.");
}

3. Blok finally

Blok finally se používá pro kód, který musí být proveden bez ohledu na to, zda došlo k výjimce nebo ne. Typicky se využívá pro uvolnění zdrojů, uzavření souborů nebo databázových spojení.

Syntaxe:

try
{
// Kód, který může způsobit výjimku
}
catch (Exception e)
{
Console.WriteLine("Došlo k chybě.");
}
finally
{
Console.WriteLine("Tento kód se provede vždy.");
}

Příklad:

try
{
int[] pole = { 1, 2, 3 };
Console.WriteLine(pole[5]); // Vyvolá IndexOutOfRangeException
}
catch (IndexOutOfRangeException e)
{
Console.WriteLine("Chyba: Přístup mimo rozsah pole.");
}
finally
{
Console.WriteLine("Konec zpracování.");
}

4. Vlastní výjimky

Můžeme vytvářet vlastní typy výjimek pro specifické potřeby aplikace. Tyto výjimky se vytvářejí děděním od třídy Exception.

Příklad:

public class MojeVyjimka : Exception
{
public MojeVyjimka(string zprava) : base(zprava)
{
}
}

Použití vlastní výjimky:

try
{
throw new MojeVyjimka("Došlo k vlastní výjimce.");
}
catch (MojeVyjimka e)
{
Console.WriteLine($"Zachycena vlastní výjimka: {e.Message}");
}

5. Klíčová slova throw a re-throw

Klíčové slovo throw se používá k vyvolání výjimky. Pomocí něj můžeme také předat výjimku dál po zpracování.

Příklad vyvolání výjimky:

throw new ArgumentException("Špatný argument.");

Příklad předání výjimky:

try
{
throw new InvalidOperationException("Chyba operace.");
}
catch (InvalidOperationException e)
{
Console.WriteLine("Výjimka zpracována.");
throw; // Předání výjimky dál
}

6. Výhody a správné použití výjimek

  • Oddělení běžného a chybového toku kódu: Výjimky umožňují snadné rozdělení běžného toku kódu od chybového zpracování.
  • Zachytávání specifických chyb: Pomocí různých typů výjimek můžeme přesně zachytit a zpracovat konkrétní chyby.
  • Zvyšování čitelnosti kódu: Použití výjimek činí kód srozumitelnějším a lépe udržovatelným.

Správná praxe:

  1. Používejte výjimky pouze pro skutečné chyby, ne pro běžnou logiku programu.
  2. Nikdy nezachytávejte obecnou výjimku Exception, pokud to není nutné.
  3. Vždy uvolňujte zdroje (např. soubory, databázová připojení) v bloku finally nebo pomocí konstrukce using.

7. Příklad komplexního zpracování výjimek

Tento příklad ukazuje, jak kombinovat různé typy bloků pro robustní zpracování výjimek:


try
{
    Console.WriteLine("Zadejte číslo:");
    int cislo = int.Parse(Console.ReadLine());
    Console.WriteLine($"Zadané číslo: {cislo}");
}
catch (FormatException e)
{
    Console.WriteLine("Chyba: Zadaná hodnota není číslo.");
}
catch (OverflowException e)
{
    Console.WriteLine("Chyba: Číslo je příliš velké nebo malé.");
}
finally
{
    Console.WriteLine("Děkujeme za použití aplikace.");
}

Závěr

Zpracování výjimek je zásadní součástí robustních a spolehlivých aplikací. C# poskytuje výkonné nástroje pro práci s výjimkami, včetně bloků try-catch-finally, možnosti vytvářet vlastní výjimky a použití klíčového slova throw. Správné používání výjimek zvyšuje čitelnost a udržovatelnost kódu a pomáhá vývojářům lépe zvládat neočekávané situace.

Jirka

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

We use cookies to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners. View more
Cookies settings
Accept
Privacy & Cookie policy
Privacy & Cookies policy
Cookie name Active

Kdo jsme

Naše webová adresa je: https://www.jefta.cz.

Komentáře

Když návštěvníci zanechají na webu komentáře, shromažďujeme údaje zobrazené ve formuláři pro komentáře a také IP adresu návštěvníka a řetězec uživatelského agenta prohlížeče, abychom pomohli odhalit spam.

Anonymizovaný řetězec vytvořený z vaší e-mailové adresy (také nazývaný hash) může být poskytnut službě Gravatar, abyste zjistili, zda ji používáte. Zásady ochrany osobních údajů služby Gravatar jsou k dispozici zde: https://automattic.com/privacy/. Po schválení vašeho komentáře bude váš profilový obrázek viditelný pro veřejnost v kontextu vašeho komentáře.

Média

Pokud na web nahráváte obrázky, měli byste se vyhnout nahrávání obrázků s vloženými údaji o poloze (EXIF GPS). Návštěvníci webu si mohou stáhnout a extrahovat jakákoli data o poloze z obrázků na webu.

Soubory cookie

Pokud na našem webu zanecháte komentář, můžete se přihlásit k ukládání svého jména, e-mailové adresy a webu do souborů cookie. Jsou pro vaše pohodlí, abyste nemuseli znovu vyplňovat své údaje, když zanecháte další komentář. Tyto cookies vydrží jeden rok.

Pokud navštívíte naši přihlašovací stránku, nastavíme dočasný soubor cookie, abychom zjistili, zda váš prohlížeč přijímá soubory cookie. Tento soubor cookie neobsahuje žádné osobní údaje a po zavření prohlížeče je vyřazen.

Když se přihlásíte, nastavíme také několik souborů cookie pro uložení vašich přihlašovacích údajů a vašich voleb zobrazení obrazovky. Přihlašovací soubory cookie vydrží dva dny a soubory cookie možností obrazovky vydrží rok. Pokud zvolíte "Zapamatovat si mě", vaše přihlášení bude trvat dva týdny. Pokud se odhlásíte ze svého účtu, přihlašovací soubory cookie budou odstraněny.

Pokud upravíte nebo publikujete článek, uloží se do vašeho prohlížeče další cookie. Tento soubor cookie neobsahuje žádné osobní údaje a pouze označuje ID příspěvku článku, který jste právě upravili. Jeho platnost vyprší po 1 dni.

Vložený obsah z jiných webových stránek

Články na tomto webu mohou obsahovat vložený obsah (např. videa, obrázky, články atd.). Vložený obsah z jiných webových stránek se chová úplně stejně, jako kdyby návštěvník navštívil jinou webovou stránku.

Tyto webové stránky mohou shromažďovat údaje o vás, používat soubory cookie, vkládat další sledování třetích stran a monitorovat vaši interakci s tímto vloženým obsahem, včetně sledování vaší interakce s vloženým obsahem, pokud máte účet a jste na dané webové stránce přihlášeni.

S kým sdílíme vaše údaje

Pokud požádáte o resetování hesla, vaše IP adresa bude zahrnuta v e-mailu pro resetování.

Jak dlouho vaše údaje uchováváme

Pokud zanecháte komentář, bude komentář a jeho metadata uchována po neomezenou dobu. Je to proto, abychom mohli rozpoznat a schválit jakékoli následné komentáře automaticky, místo abychom je drželi ve frontě na moderování.

Pro uživatele, kteří se zaregistrují na našich webových stránkách (pokud existují), ukládáme také osobní údaje, které poskytují, v jejich uživatelském profilu. Všichni uživatelé mohou kdykoli zobrazit, upravit nebo smazat své osobní údaje (kromě toho, že nemohou změnit své uživatelské jméno). Správci webových stránek mohou tyto informace také zobrazit a upravovat.

Jaká práva máte nad svými údaji

Pokud máte účet na této stránce nebo jste zanechali komentáře, můžete požádat o zaslání exportovaného souboru osobních údajů, které o vás uchováváme, včetně všech údajů, které jste nám poskytli. Můžete také požádat, abychom vymazali veškeré osobní údaje, které o vás uchováváme. To nezahrnuje žádné údaje, které jsme povinni uchovávat pro administrativní, právní nebo bezpečnostní účely.

Kam se posílají vaše data

Komentáře návštěvníků mohou být kontrolovány prostřednictvím služby automatické detekce spamu.

Save settings
Cookies settings