Qu'est-ce qu'un Enum dans les langages de programmation ?

Jeune homme assis devant un ordinateur

Richard Drury/Iconica/Getty Images





Abréviation d'énumération, une énumération type de variables peut être trouvé en C (ANSI, pas le K&R d'origine), C++ etC#. L'idée est qu'au lieu d'utiliser un entier pour représenter un ensemble de valeurs, un type avec un ensemble restreint de valeurs est utilisé à la place.

Par exemple, si nous utilisons les couleurs de l'arc-en-ciel, qui sont



  1. Rouge
  2. Orange
  3. Jaune
  4. Vert
  5. Bleu
  6. Indigo
  7. Violet

Si les énumérations n'existaient pas, vous pourriez utiliser un #définir (en do) ou constante en C++/C# pour spécifier ces valeurs. Par exemple

Trop d'ints à compter !

Le problème c'est qu'il y en a beaucoup d'autres entiers que les couleurs. Si le violet a la valeur 7, et le programme attribue une valeur de 15 à une variable, il s'agit clairement d'un bogue mais peut ne pas être détecté car 15 est une valeur valide pour un int.



Les énumérations à la rescousse

Une énumération est un type défini par l'utilisateur composé d'un ensemble de constantes nommées appelées énumérateurs. Les couleurs de l'arc-en-ciel seraient cartographiées comme ceci :

Maintenant, en interne, le compilateur utilisera un int pour les contenir et si aucune valeur n'est fournie, le rouge sera 0, l'orange est 1, etc.

Quel est l'avantage d'une énumération ?

Le fait est que arc-en-ciel est un type et seules d'autres variables du même type peuvent lui être affectées. C est plus simple (c'est-à-dire moins strictement typé), mais C++ et C# n'autoriseront pas l'affectation à moins que vous ne la forciez en utilisant un cast.

Vous n'êtes pas coincé avec ces compilateur valeurs générées, vous pouvez leur attribuer votre propre constante entière comme indiqué ici.



Avoir bleu et indigo avec la même valeur n'est pas une erreur car les enquêteurs peuvent inclure des synonymes tels que écarlate et cramoisi.

Différences linguistiques

En C, le variable déclaration doit être précédée du mot énumération un péché



En C++ cependant, ce n'est pas nécessaire car arc-en-ciel est un type distinct qui n'a pas besoin du préfixe de type enum.

En C #, les valeurs sont accessibles par le nom du type comme dans



Quel est le but des énumérations ?

L'utilisation d'énumérations augmente le niveau d'abstraction et permet au programmeur de réfléchir à la signification des valeurs plutôt que de s'inquiéter de la manière dont elles sont stockées et accessibles. Cela réduit l'apparition de bogues.

Voici un exemple. Nous avons un ensemble de feux de circulation avec trois ampoules- rouge , jaune et vert . Au Royaume-Uni, la séquence des feux de circulation change dans ces quatre phases.



    Rouge- Trafic arrêté.
  1. Tous les deux Rouge et Jaune - Le trafic est toujours arrêté, mais les feux sont sur le point de passer au vert.
  2. Vert- Le trafic peut se déplacer.Jaune- Avertissement de passage imminent au rouge.

Exemple de feu de signalisation

Les lumières sont contrôlées en écrivant dans les trois derniers bits d'un octet de contrôle. Ceux-ci sont présentés ci-dessous sous la forme d'un modèle de bits en binaire où RYG représente les trois bits. Si R vaut 1, le voyant rouge est allumé, etc.

Dans ce cas, il est facile de voir que les quatre états ci-dessus correspondent aux valeurs 4 = Rouge allumé, 6= Rouge + Jaune les deux allumés, 1 = Vert sur et 2 = Jaune sur.

Avec cette fonction

Utiliser une classe au lieu d'énumérations

En C++ et C#, nous aurions besoin de créer une classe, puis surcharge l'opérateur | autoriser OR-ing de type feux de circulation .

En utilisant des énumérations, nous évitons les problèmes avec d'autres bits affectés à l'octet de contrôle de l'ampoule. Il se peut que certains des autres bits contrôlent l'auto-test ou un commutateur 'Green Lane'. Dans ce cas, un bogue permettant de définir ces bits en utilisation normale pourrait faire des ravages.

Pour être sûr, nous masquerions les bits dans le SetTrafficlights() fonction donc, quelle que soit la valeur transmise, seuls les trois derniers bits sont modifiés.

Conclusion

Les énumérations ont ces avantages :

  • Ils limitent les valeurs que la variable enum peut prendre.
  • Ils vous obligent à réfléchir à toutes les valeurs possibles que l'énumération peut prendre.
  • Il s'agit d'une constante plutôt que d'un nombre, augmentant la lisibilité du code source