i

Fehlertypen

Datentypen für Fehler

Wir gehen von folgender Funktion zur Berechnung der maximalen Herzfrequenz aus:

maxpuls : Int -> Result String Int
maxpuls alter =
    if alter < 0 then
        Err "negativer Wert"

    else if alter < 12 then
        Err "nicht sinnvoll bei jungen Kindern"

    else if alter < 130 then
        Ok (220 - alter)

    else
        Err "unrealistisches Alter"

Hier ist ein Vorschlag für eine Funktion, die die maximale Herzfrequenz berechnet und als String zurückgibt:

maxpulsAlsString : Int -> String
maxpulsAlsString alter =
    case maxpuls alter of
        Ok puls ->
            "Maximale Herzfrequenz: " ++ String.fromInt puls ++ " Schläge pro Minute"

        Err "negativer wert" ->
            "Bitte gib ein positives Alter an"

        Err "nicht sinnvoll bei Kindern" ->
            "Bei Kindern ist eine Pulsmessung beim Training nicht empfohlen"

        Err "unrealstisches Alter" ->
            "Bitte gib ein realistisches Alter an"

        Err _ ->
            "unvorhergesehener Fehler"

Aufgabe 1

Teste die Funktion maxpulsAlsString mit verschiedenen Eingabewerten. Erlautere warum die Angabe des Fehlertyps als String nicht optimal ist.

Ein konkreter Fehlertyp

Es wäre besser, wenn die Funktion maxpuls nicht einfach einen String zurückgeben würde, sondern einen Wert eines konkreten Fehlertyps. Das könnte zum Beispiel so aussehen:

type MaxpulsFehler
    = NegativesAlter
    | ...

Aufgabe 2

Ergänze die Typdefinition und implementiere die Funktion maxpuls mit diesem neuen Fehlertyp.

Aufgabe 3

Implementiere die Funktion maxpulsAlsString so, dass sie mit dem neuen Fehlertypen funktioniert.
Zusatzaufgabe: Wie müsste man die Funktion maxpulsAlsString anpassen, wenn man die unterschiedlichen Fehlerfälle zusammenfassen möchte?

Suche

v
8.2.2.9.2.4 Fehlertypen
Kopieren durch Anklicken

Rückmeldung geben