Aufzählungstyp
# Aufzählungstyp

Ein Aufzählungstyp (englisch enumerated type) ist ein Datentyp für Variablen mit einer endlichen Wertemenge. Alle zulässigen Werte des Aufzählungstyps werden bei der Deklaration des Datentyps mit einem eindeutigen Namen (Identifikator) definiert, sie sind Symbole. Dabei kann auch eine Reihenfolge festgelegt werden, die eine Ordnung der einzelnen Werte bestimmt, nach der dann sortiert werden kann.

Bei Aufzählungstypen kann mitunter auch der textuelle Name eines Symbols direkt Verwendung finden, gewissermaßen als festgelegte Zeichenkette.

## Unterstützende Sprachen

Aufzählungstypen sind zum Beispiel in den Programmiersprachen Pascal, Modula-2, Modula-3, Ada, Haskell, C, C++, C# und VB.Net üblich. In Java werden Aufzählungen erst ab der Version 5 unterstützt, dafür sind sie hier als echte Objekte mit objektorientierten Mitteln erweiterbar.

## Typsicherheit

Man unterscheidet typenlose Aufzählungen wie in C, die lediglich Namen für numerische Werte festlegen (im Allgemeinen Ganzzahlen), und typsichere Aufzählungen wie in Pascal und Java. Typsichere Aufzählungstypen verhindern, dass Werte aus unterschiedlichen Aufzählungstypen verglichen oder zugewiesen werden können. So wäre beispielsweise die Farbe BLAU aus dem unten stehenden Beispiel ein anderer Wert als das erste Element eines anderen Aufzählungstypen (zum Beispiel APFEL der Aufzählung Obst). Eine Variable vom Typ Farbe ist nicht zuweisungskompatibel mit einem Wert vom Typ Obst. Dies bringt den Vorteil, dass der Compiler keine fehlerhaften Zuweisungen zulässt.

## Beispiele

Der einfachste und häufigste Aufzählungstyp mit exakt zwei gültigen Werten ist der logische Datentyp Boolean:

Ein Beispiel für einen Aufzählungstyp, der Farben repräsentiert:

Ein Beispiel für einen Aufzählungstyp, der Obst repräsentiert:

Dies ermöglicht die folgende Zuweisung, in welcher der Variablen tapetenfarbe vom Typ Farbe der Wert BLAU zugewiesen wird:

In einer typensicheren Programmiersprache würde Folgendes einen Fehler erzeugen:

Bei typenlosen Aufzählungen (wie in der Sprache C) ist möglich:

In einigen Sprachen lässt sich den Werten eine ganze Zahl zuweisen, statt die Zuteilung dem Compiler zu überlassen, um einfacher zwischen Werten und ganzen Zahlen zu konvertieren oder eine Bitmenge zu ermöglichen (siehe unten). Wird die Zahl bei einem späteren Element nicht vorgegeben, zählt der Compiler von der letzten ihm bekannten Zahl weiter:

Zudem kann teils für einen Aufzählungstyp ein zugehöriger Mengentyp (englisch set) deklariert werden. Für diesen stehen dann Vergleiche und Mengenoperatoren zur Verfügung.

Falls in Sprachen mit typenlosen Aufzählungen solche Mengentypen nicht als eigenes Sprachelement unterstützt werden, ist die Nutzung von Bitmustern üblich. Dazu werden den Werten Zweierpotenzen als Zahlenwert zugewiesen und Mengenoperatoren mittels bitweiser Operatoren umgesetzt:

