Haskell:
Fehlerbehandlung

Wie:

Haskell behandelt Fehler robust durch Typen wie Maybe und Either. Hier ein kurzer Überblick:

safeDivide :: Integral a => a -> a -> Maybe a
safeDivide _ 0 = Nothing  -- Teilen durch null geht nicht, also geben wir Nothing zurück.
safeDivide x y = Just (x `div` y)  -- Ansonsten ist alles gut, wir geben das Ergebnis in einem Just zurück.

-- Lass es uns in Aktion sehen:
example1 :: Maybe Int
example1 = safeDivide 10 2  -- Just 5

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

Für komplexere Fehlerbehandlung kommt Either ins Spiel:

safeDivideEither :: Integral a => a -> a -> Either String a
safeDivideEither _ 0 = Left "Fehler: Division durch Null."  -- Diesmal trägt der Fehler eine Nachricht.
safeDivideEither x y = Right (x `div` y)

-- Und in Verwendung:
example3 :: Either String Int
example3 = safeDivideEither 10 2  -- Right 5

example4 :: Either String Int
example4 = safeDivideEither 10 0  -- Left "Fehler: Division durch Null."

Tiefgang

In der Haskell-Welt hat die Fehlerbehandlung eine lange Geschichte. Früher konnten Fehler das gesamte Programm zum Absturz bringen—kein Spaß. Das Typensystem von Haskell bietet Wege, um dies viel unwahrscheinlicher zu machen. Wir haben Maybe und Either, aber es gibt auch andere wie Exceptions und IO für verschiedene Szenarien.

Maybe ist einfach: Du erhältst Just etwas, wenn alles in Ordnung ist, oder Nothing, wenn es das nicht ist. Either geht einen Schritt weiter und ermöglicht dir, eine Fehlermeldung (Left) oder ein erfolgreiches Ergebnis (Right) zurückzugeben.

Beide sind rein, was bedeutet, dass sie die Außenwelt nicht beeinflussen – ein großes Ding in Haskell. Wir vermeiden die Fallstricke von ungeprüften Ausnahmen, die einige andere Sprachen plagen.

Für diejenigen, die mit Maybe und Either nicht zufrieden sind, bieten Bibliotheken wie Control.Exception traditionellere, imperativ-stilisierte Fehlerbehandlung durch Ausnahmen. Aber deren zu freizügige Verwendung kann die Dinge verkomplizieren, daher bleibt die Gemeinschaft oft bei den Typen.

Siehe Auch

Tauche tiefer ein mit: