Was ist eine Aufzählung in Programmiersprachen?

Abkürzung für Enumeration, eine Aufzählung Variablentyp finden Sie in C (ANSI, nicht das Original K & R), C ++ und C #. Die Idee ist, dass anstelle eines int Zur Darstellung einer Wertemenge wird stattdessen ein Typ mit einer eingeschränkten Wertemenge verwendet.

Zum Beispiel, wenn wir die Farben des Regenbogens verwenden, die sind

  1. rot
  2. Orange
  3. Gelb
  4. Grün
  5. Blau
  6. Indigo
  7. Violett

Wenn keine Aufzählungen vorhanden sind, können Sie a verwenden #definieren (in C) oder const in C ++ / C #, um diese Werte anzugeben. Z.B

Zu viele Ints zum Zählen!

Das Problem dabei ist, dass es noch viel mehr gibt ints als Farben. Wenn Violett den Wert 7 hat und die Programm Weist einer Variablen den Wert 15 zu, ist dies eindeutig ein Fehler, wird jedoch möglicherweise nicht erkannt, da 15 ein gültiger Wert für ein int ist.

Aufzählungen zur Rettung

Eine Aufzählung ist ein benutzerdefinierter Typ, der aus einer Reihe benannter Konstanten besteht, die als Aufzähler bezeichnet werden. Die Farben des Regenbogens würden folgendermaßen abgebildet:

instagram viewer

Jetzt verwendet der Compiler intern ein Int, um diese zu speichern. Wenn keine Werte angegeben werden, ist Rot 0, Orange 1 usw.

Der Punkt ist, dass Regenbogenfarben ist ein Typ, dem nur andere Variablen desselben Typs zugeordnet werden können. C ist einfacher (dh weniger streng typisiert), aber C ++ und C # erlauben keine Zuweisung, es sei denn, Sie erzwingen es mithilfe einer Besetzung.

Sie sind nicht mit diesen fest Compiler Bei generierten Werten können Sie ihnen wie hier gezeigt eine eigene Ganzzahlkonstante zuweisen.

Blau und Indigo mit demselben Wert zu haben, ist kein Fehler, da Aufzähler Synonyme wie Scharlach und Purpur enthalten können.

Sprachunterschiede

In C ist die Variable Der Erklärung muss das Wort vorangestellt sein Aufzählung wie in

In C ++ wird es jedoch nicht als benötigt Regenbogenfarben ist ein eindeutiger Typ, der das Präfix für den Aufzählungstyp nicht benötigt.

In C # wird auf die Werte über den Typnamen wie in zugegriffen

Was ist der Sinn von Aufzählungen?

Die Verwendung von Aufzählungen erhöht den Abstraktionsgrad und lässt den Programmierer darüber nachdenken, was die Werte bedeuten, anstatt sich Gedanken darüber zu machen, wie sie gespeichert werden und auf sie zugegriffen wird. Dies reduziert das Auftreten von Fehlern.

Hier ist ein Beispiel. Wir haben eine Ampel mit drei Glühbirnen. rot, Gelb und Grün. In Großbritannien ändert sich die Reihenfolge der Ampeln in diesen vier Phasen.

  1. rot - Verkehr gestoppt.
  2. Beide rot und Gelb - Der Verkehr wurde immer noch gestoppt, aber die Lichter werden bald grün.
  3. Grün - Der Verkehr kann sich bewegen.
  4. Gelb - Warnung vor einem bevorstehenden Wechsel zu Rot.

Ampel Beispiel

Die Lichter werden gesteuert, indem in die unteren drei Bits eines Steuerbytes geschrieben wird. Diese sind unten als binäres Bitmuster angelegt, wobei RYG die drei Bits darstellt. Wenn R 1 ist, leuchtet das rote Licht usw.

In diesem Fall ist leicht zu erkennen, dass die vier obigen Zustände den Werten 4 = entsprechen rot ein, 6 = rot + Gelb beide an, 1 = Grün ein und 2 = Gelb auf.

Mit dieser Funktion

Verwenden einer Klasse anstelle von Aufzählungen

In C ++ und C # müssten wir eine Klasse erstellen und dann Überlast der Betreiber | erlauben ODER-ing von Typen Ampeln.

Durch die Verwendung von Aufzählungen verhindern wir Probleme mit anderen Bits, die dem Lampensteuerungsbyte zugewiesen werden. Es kann sein, dass einige der anderen Bits den Selbsttest oder einen "Green Lane" -Schalter steuern. In diesem Fall kann ein Fehler, der das Setzen dieser Bits bei normaler Verwendung ermöglicht, Chaos anrichten.

Um sicher zu sein, würden wir die Bits in der maskieren SetTrafficlights ()Funktion Unabhängig davon, welcher Wert übergeben wird, werden nur die unteren drei Bits geändert.

Fazit

Aufzählungen haben folgende Vorteile:

  • Sie beschränken die Werte, die die Enum-Variable annehmen kann.
  • Sie zwingen Sie, über alle möglichen Werte nachzudenken, die die Aufzählung annehmen kann.
  • Sie sind eher eine Konstante als eine Zahl, was die Lesbarkeit der Quellcode