Aufzählungen in Racket
Aufzählungen - Modellierung
Eine Möglichkeit unsere eigenen Datentypen zu entwerfen, ist die Aufzählung (eng. Enumeration).
Eine Aufzählung verwenden wir immer dann, wenn wir einen neuen Datentyp definieren wollen und wir den Datentyp mit den Worten "ist eine(s) der folgenden..." beschreiben können.
;Die Farbe des pH-Indikators Bromthymolblau ist eine der folgenden:
; - "gelb"
; - "grün"
; - "blau"
Tipp: Es lohnt sich diese Überlegungen zur Datenmodellierung als Kommentare direkt in unseren Code zu schreiben, da wir so anschließend
sehr einfach eine neue Datendefinition umsetzen können.
Aufgabe 1. Modellierung von Aufzählungen
A1.1 Öffne deine Datei mit den Funktionen bromthymolblau-pHZustand und prozent-zu-mss.
A1.2 Ergänze die Datei um geeignete Datenmodellierungen, analog zur Farbe des pH-Indikators, zur Repräsentation von:
- dem pH-Zustand
- MSS-Notenpunkte
Aufzählungen - Implementierung
Um eine in Racket verwendbare Aufzählung zu implementieren, benötigen wir drei Schlüsselwörter:-
define
- Definiert den Namen unseres neuen Datentyps.
-
signature
- Gibt an, dass die folgende Aufzählung als Datentyp in der Signatur zu verwenden ist.
-
enum
- Steht für das Englische Enumeration und wird in vielen Programmiersprachen zur Definition von Aufzählungen verwendet.
- Hinter enum folgt eine Aufzählung aller zulässiger Werte unabhängig vom Datentyp (so können beispielsweise Daten der Datentypen string, boolean und number gemischt werden).
;Die Farbe des Indikators ist eine der folgenden:
; - "gelb"
; - "grün"
; - "blau"
(define bromthymolblauFarbe
(signature
(enum "gelb" "grün" "blau")))
Wie du siehst müssen wir, wenn wir bereits eine geeignete Modellierung geschrieben haben, einfach nur noch unsere einzelnen Aufzählungen
von ist eine(s) der folgenden hinter das Schlüsselwort enum einfügen und sind bereits fertig.
Aufgabe 2. Erstellen von Aufzählungen
A2.1 Füge die Aufzählung bromthymolblauFarbe deinem Programm hinzu.
A2.2 Ergänze deine Datenmodellierung, analog zur Farbe des pH-Indikators, für:
- den pH-Zustand
- MSS-Notenpunkte
Aufzählungen mit festen Zahlenwerten
Du wirst sicherlich festgestellt haben, das eine Aufzählung sehr schnell sehr groß werden kann, insbesondere wenn
es um Zahlenwerte geht. Das Aufschreiben von 16 Zahlenwerten bei MSS-Punkten ist vielleicht noch gut machbar, aber möchten
wir dies nun beispielsweise für alle ganzzahligen Prozentwerte von 0 bis 100 machen, wird dies schnell lästig.
Für feste Wertebereiche bietet Racket daher die Funktion integer-from-to an.
Die beiden folgenden Definition lassen sich äquivalent im Racket-Code verwenden:
(define mss-punkte
(signature
(enum 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)))
(define mss-punkte
(signature
(integer-from-to 0 15)))
Aufgabe 3. Funktionen um geeignete Aufzählungen ergänzen
A3.1 Entwerfe eine geeignete Aufzählung für die ganzzahlige prozent-Angabe.
A3.2 Passe die Funktionen bromthymolblau-pHZustand und prozent-zu-mss mit den geeigneten Signaturen an und überprüfe die Funktionalität mithilfe deiner Tests.