Aufzählungstypen
Aufzählungstypen (engl. enumeration type) bestehen aus mehreren Elementen, die man einzeln benennt und die einer fixen Reihenfolge unterliegen. Die Syntax für Aufzählungstypen ist einfach:
Name = (Elem1, Elem2, Elem3, ...);
Sowohl der Typ als auch die Elemente müssen durch eindeutige Bezeichner spezifiziert sein.
Beispiel: |
Als Beispiel sei der Aufzählungstyp TWeekDay deklariert, der es gestattet, die Wochentage als eigenen Typ zu verwenden:
TWeekDay = (wdMon, wdTue, wdWed, wdThu, wdFri, wdSat, wdSun);
|
Die wesentliche Eigenschaft von Aufzählungstypen ist die geordnete und fixe Reihenfolge der einzelnen Elemente. Jedes Element bekommt eine Ordinalzahl zugeordnet (von 0 beginnend), die mit der Funktion ord ermittelt werden kann. Die Funktionen succ und pred ergeben jeweils den nächsten bzw. den vorigen Wert in der Reihenfolge der Elemente. Das Ergebnis von succ und pred ist für den letzten bzw. ersten Wert eines Aufzählungstyps undefiniert. Aufzählungstypen können auch als Index für Felder und als Schleifenzähler verwendet werden (siehe unten).
Aufzählungstypen sind aus logischer Sicht eigentlich überflüssig, da man alle Berechnungen, die mit Aufzählungstypen durchgeführt werden können, auch mit passenden integer-Werten durchführen kann. Wie bei Konstanten ist die Verwendung von Aufzählungstypen eine Frage des Stils und der Programmiermethodik - und genau das macht diese Typen wertvoll.
Beispiel: |
Das folgende Beispiel zeigt die selbe Konstruktion, einmal mit und einmal ohne Verwendung von Aufzählungstypen:
type
TWeekDay = (wdMon, wdTue, wdWed, wdThu, wdFri, wdSat, wdSun);
var
wd : TWeekDay;
Income : array[TWeekDay] of double;
sum : double;
begin
sum := 0;
for wd:=wdMon to wdFri do
sum := sum + Income[wd];
end;
Hier nun zum Vergleich das äquivalente Konstrukt, aber ohne Aufzählungstyp. In diesem Fall muss sich der Programmierer überlegen, wie er die Zuordnung des ganzzahligen Wertes wd zu den Wochentagen vornimmt.
var
wd : integer;
Income : array[0..6] of double;
sum : double;
begin
sum := 0;
for wd:=0 to 4 do // 0 = Monday, 4 = Friday
sum := sum + Income[wd];
end;
Um eine Vorstellung davon zu bekommen, wie elegant Aufzählungstypen sind, versuchen wir die beiden Programme so umzuschreiben, dass die Woche mit Sonntag beginnt. Im ersten Fall braucht man nur die Definition von TWeekDay entsprechend ändern, während für den zweiten Fall sämtliche Referenzen auf das Feld Income angepasst werden müssen (was zwar in diesem kleinen Beispiel keine Hexerei ist, aber bei größeren Programmteilen sehr schnell zu einem Albtraum werden kann).
|
|