HSG |
|
Aufzählungstypen definieren eine Menge von Werten mit eindeutiger Reihenfolge, indem einfach die einzelnen Bezeichner dieser Werte aneinander gereiht werden. Die Werte selbst haben keine eigene Bedeutung.
type TFarbe = (rot, orange, gelb, gruen, blau, violett);
Einer Variablen farbe vom Typ TFarbe kann man jetzt z.B. den Wert gruen zuweisen:
var farbe : TFarbe; ... farbe := gruen;
Man beachte, dass die Regeln für Pascal-Bezeichner eingehalten
werden müssen, dh. gruen statt grün.
Intern nummeriert Delphi die Werte bei 0 beginnend durch. Mit TFarbe(2) erhält man den
Wert gelb, mit Low(TFarbe) den Wert rot, mit High(TFarbe) den Wert
violett. Da die Werte geordnet sind, kann mit Succ(gruen) der Nachfolger
(Successor)-Wert blau erreicht werden. Entsprechend liefert Pred(gelb)
(Preducer) den Wert orange.
An die interne Nummerierung kommt man über die Funktion Ord heran, so liefert z.B.
Ord(blau) den integer-Wert 4.
Die interne Nummerierung kann beeinflusst werden, zu Details siehe die Delphi-Hilfe unter
"Aufzählungstypen".
Aufzählungstypen sind skalare Typen, sie können in for-Schleifen und case-Anweisungen verwendet
werden:
for farbe := rot to blau do ...
Aufzählungstypen können auch als Index-Menge von Arrays benutzt werden:
var wellenlaenge : array[TFarbe] of real; ... wellenlaenge[rot] := 632.8;
Delphi selbst macht in seinen Bibliotheken ausgiebig Gebrauch von Aufzählungstypen. So ist der Typ TMouseButton als Aufzählungstyp definiert:
type TMouseButton = (mbLeft, mbRight, mbMiddle);
Es ist eine gute Sitte, die Bezeichner mit einer Buchstabenfolge beginnen zu lassen, die auf den Typ schließen lässt. Im Beispiel mb wie MouseButton.
Man kann den Wert eines Aufzähltyps in einen String verwandeln, wie folgendes Beispiel zeigt:
Zustand.Caption := 'Zustand: '+ getEnumName(TypeInfo(TZustand),ord(automat.GetZustand));
Die Funktion getEnumName findet man in der Unit TypInfo, die Funktion TypeInfo in der Unit System.
Ab Version 1.5 verfügt auch Java (endlich!) über Aufzählungstypen (enum).