Haskell:
Feilhåndtering

Hvordan:

Haskell håndterer feil robust gjennom typer som Maybe og Either. Her er et raskt blikk:

safeDivide :: Integral a => a -> a -> Maybe a
safeDivide _ 0 = Nothing  -- Det går ikke å dele på null, så vi returnerer Nothing.
safeDivide x y = Just (x `div` y)  -- Ellers er alt bra, returner resultatet i en Just.

-- La oss se det i aksjon:
example1 :: Maybe Int
example1 = safeDivide 10 2  -- Just 5

example2 :: Maybe Int
example2 = safeDivide 10 0  -- Nothing

For mer kompleks feilhåndtering, kommer Either inn i bildet:

safeDivideEither :: Integral a => a -> a -> Either String a
safeDivideEither _ 0 = Left "Divisjon på null feil."  -- Denne gangen bærer feilen et budskap.
safeDivideEither x y = Right (x `div` y)

-- Og i bruk:
example3 :: Either String Int
example3 = safeDivideEither 10 2  -- Right 5

example4 :: Either String Int
example4 = safeDivideEither 10 0  -- Left "Divisjon på null feil."

Dypdykk

I Haskell-verdenen har feilhåndtering en sterk historie. Tilbake i tiden kunne feil ta ned hele programmet ditt—ikke noe gøy. Haskells typesystem tilbyr måter å gjøre dette mye mindre sannsynlig på. Vi har Maybe og Either, men det finnes også andre som Exceptions og IO for forskjellige scenarioer.

Maybe er enkel: du får Just noe hvis alt er vel, eller Nothing hvis det ikke er det. Either tar det et skritt videre, som tillater deg å returnere en feilmelding (Left) eller et vellykket resultat (Right).

Begge er rene, noe som betyr at de ikke roter med den ytre verdenen – en stor sak i Haskell. Vi unngår fallgruvene med ukontrollerte unntak som plager noen andre språk.

For de som ikke er fornøyde med Maybe og Either, tilbyr biblioteker som Control.Exception mer tradisjonell, imperativ-stil feilhåndtering gjennom unntak. Men å bruke dem for liberalt kan komplisere ting, så samfunnet holder seg ofte til typene.

Se Også

Dykk dypere med: