Zpracování chyb a výjimek

Datový typ Maybe je velmi užitečný. Obsahuje dva konstruktory: Just x a Nothing. Pokud je daná hodnota dostupná, vyjádří se jako Just hodnota, v opačném připadě jako Nothing. Můžeme na tento datový typ nahlížet jako na hodnotu NULL v databázových systémech. Dalším šikovným datovým typem je Either. Ten má dva datové konstruktory: Left x a Right y. Vrací jednu ze dvou hodnot, přičemž hodnoty v těchto konstruktorech mohou být různého typu.

V Haskellu máme několik možností, jak ošetřit výjimečné či chybové stavy. Můžeme vyhazovat obecnou chybu pomocí funkce error, napsat si vlastní chybovou funkci pomocí monád (např. přes modul Control.Monad.Error, pro samotný vstup a výstup System.IO.Error), použít modul Control.Exception, či vracet datový typ Maybe nebo Either. Podrobný popis těchto řešení lze nalézt v lehce zastaralém článku článku Erica Kidda a nebo v devatenácté kapitole knihy Real World Haskell.

Ať už zvolíme jakýkoliv přístup, naše programy musí být robustní, dobře strukturované a nesmí mást uživatele nesmyslnými chybovými hláškami. V případě modulu Control.Exception máme možnost výjimky odchytávat a dále zpracovávat pomocí funkce catch, což hodně věcí usnadňuje.

Ukončení programu

Za zmínku stojí i modul System.Exit, pomocí kterého můžeme naše programy řádně ukončovat. Bývá totiž dobrým zvykem v prostředí operačních systémů dle standardu POSIX používat návratový kód programu k identifikaci stavu, podle kterého se dále mohou řídit ostatní programy. Funkce exitSuccess ukončí program, je-li všechno v pořádku (typicky s návratovým kódem 0), funkce exitFailure, nastaly-li nějaké chyby (typicky s kódem 1), a konečně, funkce exitWith nám ve spojení s konstruktorem ExitFailure umožňuje program ukončit s námi definovaným návratovým kódem (typicky z rozsahu 1-127).

← IB016