Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Delphi
Naučte se programovat v Delphi (10. díl) - Výjimky
30. listopadu 2001, 00.00 | Často v programech dochází k nejrůznějším chybám, kvůli kterým se program může zhroutit. V dněšním díle seriálu si představíme výjimky, které slouží k ošetření vzniklých chyb.
Často v programech dochází k nejrůznějším chybám, kvůli kterým se program může zhroutit. V dněšním díle seriálu si představíme výjimky, které slouží k ošetření vzniklých chyb.
Aplikace může být sebelépe naprogramovaná, ale když není ošetřena vůči předvídatelným chybám, může se kdykoliv shroutit.Takovéto chyby mohou vzniknout např. při zápisut na disk, který je zaplněn, při pokusu o dělení nulou atp. Výjimky nedokáží takovéto chyby předvídat, ale dokáží je ošetřit. Ošetřit znaméná, že program může pokračovat dál v chodu a nezhroutí se.
Runtimeové chyby
Dělení nulou, přetečení, podtečení hodnoty proměnné atd. jsou runtimeové chyby (run-in-time), tzv. chyby za běhu programu.
Runtimeové chyby se dělí na I/O chyby a fatální chyby. I/O chyby nastávají při vztupu a výztupu. Mezi ně patří třeba pokus o práci se souborem, který není otevřen, čtení procedurou read za koncem souboru apod. Dalším typem chyb jsou fatální chyby, které vždy okamžitě ukončí program. V aplikacích využívajících SysUtils jsou převáděny na výjimky. Mezi fatální chyby patří například již zmiňované dělení nulou (výjimka EDivByZero), neplatné přetypování (EInvalidCast), porušení přístupových práv (EAccessViolation) apod. Přehled všech chyb najdete v kompletní referenci k operačnímu systému.
Výjimky
Když víte, že se v nějakém useku kódu může vyskytnout nějaká nečekaná chyba, např. chyba při práci se soubory, měli byste toto místo ošetřit výjimkou. Základní typ výjimky se skládá z konstrukce try (zkus) a except.
|
Příkazy za except se provádějí jen při výskytu výjimky. Jakmile se po příkazu try vyskytne výjimka, skočí se hned do části za příkazem except a další příkazy se neprovádějí. Asi nejlepším příkladem využití výjimek je pokus o dělení nulou. Jak určitě každý ví dělit nulou nelze a kdybychom náš program vůči takové chybě neochránily shroutil by se. Nejprve si ukážeme, co se stane s programem, když potenciální chyba nebude ošetřena.
|
Při běhu programu v Delphi vám debugger zobrazí toto hlášení o vzniku výjimky.
Možná to není moc čitelné (kvůli velikosti obrázku), ale toto dialogové okno nás informuje i o jménu výjimky, která vznikla. V tomto případě EZeroDivide, tedy dělení nulou. Toto okno zobrazí debugger Delphi a následující už sami windows při "normálním" běhu programu.
Jednotlivé třídy výimek mají schopnost zobrazovat dialogová hlášení o vzniku výjimky, ale naším úkolem je předejít zobrazení tohoto hlášení ošetřením výjimky pomocí try...except.
Formální deklarace toho jak by mělo takové ošetření výjimky vypadat vidíte v následující tabulce.
|
Takže v praxi by to mělo vypadat nějak takhle.
|
Výsledek vypadá takto.
Program se neukončí a může se jet dál.
Try...finally
Konstrukce try...finally je hodně podobná předchozí variantě, ale rozdíl spočívá v tom, že příkazy po části finally se provedou vždy bez ohledu na vznik výjimky. Nejčastěji se tato varianta používá při práci se soubory nebo při připojování a odpojování komponenty k/od serveru. Formální deklarace vypadá skoro stejně, takže ji zde nebudu uvádět. Vysvětlím to rovnou na příkladu.
|
Práci se soubory bude náplní příštího článku, ale vám postačí vědět, že příkazem rewrite vytvoříme nový soubor a příkazem writeln se do něj pokusíme něco zapsat. Pokud na disku nebude místo, tak vznikne výjimka, která přeruší běh programu, ale my ještě musíme ukončit práci se souborem příkazem CloseFile a ten je umístěn v části finally.
Raise
Příkaz raise dokáže výjimky vyvolávat, a proto se nám hodí tam, kde vznikne chyba ale nevyvolá se výjimka. To se hodí například v případě, kdy má uživatel zadat vstupní hodnotu a ta nesmí být větší než třeba 100, ale on se jí tam stejně pokusí zadat.
|
Chybové hlášení se bude zobrazovat tak dlouho, dokud uživatel nezadá správnou hodnotu.
Příště
Náplní příštího dílu seriálu bude práce se soubory.
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007