Problemsituation
Begrüßung auf einer Webseite
Es soll eine Funktion geschrieben werden, die eine Begrüßung zurückgibt. Die Begrüßung hängt davon ab, ob der Benutzer auf der Webseite angemeldet ist oder nicht und folgendermaßen zu benutzen sein:
> begruessen "Angemeldet"
"Willkommen" : String
> begruessen "Abgemeldet"
"Zum Anmelden oben klicken" : String
Hier findest du ein paar Vorschläge für mögliche Implementierungen:
begruessen1 status =
-- Problem: Bei Tippfehlern in status erhält man immer Willkommen
-- Groß-/Kleinschreibung sorgt schon für fehlerhafte Rückgabe
if status == "Abgemeldet" then
"Zum Anmelden oben klicken"
else
"Willkommen"
begruessen2 status =
-- Problem: Man muss einen Fehlerfall mitführen, der eigentlich nicht auftreten dürfte
-- Es gibt keine Möglichkeit den Fehler schon vom Compiler melden zu lassen
if status == "Abgemeldet" then
"Zum Anmelden oben klicken"
else if status == "Angemeldet" then
"Willkommen"
else
"Fehler"
begruessen3 status =
-- Gleiches Problem, nur eventuell etwas eleganterer Code
case status of
"Abgemeldet" ->
"Zum Anmelden oben klicken"
"Angemeldet" ->
"Willkommen"
_ ->
"Fehler"
Aufgabe
Untersuche und bewerte die Implementierungen. Teste bei Bedarf in der REPL z.B. mit
begruessen "Abgemeldet"
, begruessen "abgemeldet"
oder begruessen "Agnemeldet"
, .
Verbesserte Variante mit Benutzernamen
Eine mögliche Variante, um die Funktionen oben zu verbessern, besteht darin, für den Status nur Wahrheitswerte zuzulassen:
begruessen abgemeldet =
if abgemeldet then
"Zum Anmelden oben klicken"
else
"Willkommen "
Zusätzlich zum Status, ob man ab- oder angemeldet ist, soll noch ein Benutzername übergeben werden, der angezeigt wird, falls man angemeldet ist. Falls man abgemeldet ist, existiert natürlich kein sinnvoller Benutzername. Die Funktion kann folgendermaßen erweitert werden:
begruessen abgemeldet name =
if abgemeldet then
"Zum Anmelden oben klicken"
else
"Willkommen " ++ name
Aufgabe
Untersuche und bewerte die Implementierung.