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
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?