i

Fachkonzept - Fehlerbehandlung mit Maybe

Erfolgreiche oder fehlgeschlagene Berechnungen

Die Programmiersprache Elm ist so konzipiert, dass nahezu keine Laufzeitfehler auftreten können. Das ist ein großes Plus dieser Programmiersprache. Elm erreicht das mit Hilfe des Typsystems. Zur Charakterisierung potentiell unsicherer Operationen nutzt man geeignete Datentypen und behandelt Fehler als Daten. Wie das funktioniert wird im Folgenden am Datentyp Maybe verdeutlicht.

Der Datentyp Maybe

Der Datentyp Maybe ist so definiert:

type Maybe a
    = Just a
    | Nothing

Die Typvariable a kann dabei mit einem beliebigen vordefinierten Typ oder einem selbst definierten Typ konkretisiert werden.

Beispiel: Maybe Int

Die Typdefinition von Maybe besagt, dass es genau zwei Sorten von Daten vom Datentyp Maybe Int gibt: Zum einen Daten wie Just 2 oder Just -4, die besagen, dass genau die betreffende Int-Zahl gemeint ist. Zum anderen gibt es den Datenwert Nothing, der besagt, dass es sich um nichts dergleichen (hier: um keine Int-Zahl) handelt.

Der Datentyp Maybe wird des öfteren bei gängigen vordefinierten Funktionen benutzt.

Beispiel: Zahlumwandlung mit String.toInt

> String.toInt
<function> : String -> Maybe Int
> String.toInt "2"
Just 2 : Maybe Int
> String.toInt "hi"
Nothing : Maybe Int

Immer, wenn eine Umwandlung einer Zeichenkette in eine Zahl schiefläuft, wird der Datenwert Nothing zurückgegeben.

Beispiel: Listenzugriff mit List.head und List.tail

> List.head
<function> : List a -> Maybe a
> List.head [1,2,3]
Just 1 : Maybe number
> List.head []     
Nothing : Maybe a

Bei einer leeren Liste ist kein Zugriff möglich. Dann wird der Datenwert Nothing zurückgegeben.

Die Beispiele verdeutlichen, dass in Fehlersituationen ein Fehler-Datenwert zurückgeliefert wird, der dann weiterverarbeitet werden kann. Es tritt dadurch kein Laufzeitfehler auf.

Verarbeitung von Maybe-Daten

Eine Verarbeitung von Maybe-Daten wird häufig mit einem case-Ausdruck beschrieben.

stringToInt : String -> Int
stringToInt zeichenkette =
    let
        maybezahl =
            String.toInt zeichenkette
    in
    case maybezahl of
        Just x ->
            x

        Nothing ->
            0

Hier wird im Nothing-Fall ein selbst gewählter Defaultwert zurückgegeben.

Eine Verarbeitung von Maybe-Daten ist auch mit der vordefinierten Funktion withDefault möglich.

stringToInt: String -> Int
stringToInt zeichenkette = Maybe.withDefault 0 (String.toInt zeichenkette)

Hier wird der selbst gewählte Defaultwert innerhalb der Funktion withDefault gesetzt.

In beiden Implementierungen liefert die selbst Funktion stringToInt keine Laufzeitfehler, da sie für alle möglichen Übergabewerte vom Typ String einen Rückgabewert vom Typ Int erzeugt.

Suche

v
8.2.2.9.4 Fachkonzept - Fehlerbehandlung mit Maybe
Kopieren durch Anklicken

Rückmeldung geben