Haskell:
Gestione degli errori
Come fare:
Haskell gestisce in modo robusto gli errori attraverso tipi come Maybe
e Either
. Ecco uno sguardo rapido:
safeDivide :: Integral a => a -> a -> Maybe a
safeDivide _ 0 = Nothing -- Dividere per zero non va bene, quindi restituiamo Nothing.
safeDivide x y = Just (x `div` y) -- Altrimenti, tutto ok, restituiamo il risultato in un Just.
-- Vediamolo in azione:
example1 :: Maybe Int
example1 = safeDivide 10 2 -- Just 5
example2 :: Maybe Int
example2 = safeDivide 10 0 -- Nothing
Per una gestione degli errori più complessa, entra in gioco Either
:
safeDivideEither :: Integral a => a -> a -> Either String a
safeDivideEither _ 0 = Left "Errore di divisione per zero." -- Questa volta, l'errore porta un messaggio.
safeDivideEither x y = Right (x `div` y)
-- E nell'uso:
example3 :: Either String Int
example3 = safeDivideEither 10 2 -- Right 5
example4 :: Either String Int
example4 = safeDivideEither 10 0 -- Left "Errore di divisione per zero."
Approfondimento
Nel mondo di Haskell, la gestione degli errori ha una lunga storia. Ai tempi, gli errori potevano far crollare l’intero programma — niente divertimento. Il sistema di tipi di Haskell offre modi per rendere tutto ciò molto meno probabile. Abbiamo Maybe
e Either
, ma ci sono anche altri come Exceptions
e IO
per scenari diversi.
Maybe
è semplice: ottieni Just
qualcosa se va tutto bene, o Nothing
se non è così. Either
alza il livello consentendo di restituire un messaggio di errore (Left
) o un risultato di successo (Right
).
Entrambi sono puri, nel senso che non interferiscono con il mondo esterno — un grande affare in Haskell. Evitiamo le insidie delle eccezioni non controllate che affliggono alcuni altri linguaggi.
Per coloro che non si accontentano di Maybe
e Either
, librerie come Control.Exception
forniscono una gestione degli errori più tradizionale, in stile imperativo, attraverso le eccezioni. Ma usarle troppo liberamente può complicare le cose, quindi la comunità spesso si attiene ai tipi.
Vedi Anche
Approfondisci con:
- I documenti di Haskell: Haskell
- Ottimo per principianti: “Impara Haskell per il tuo bene!”