Qu'est-ce qu'une énumération dans les langages de programmation?

Abréviation d'énumération, une énumération type variable peut être trouvé en C (ANSI, pas le K&R d'origine), C ++ et C #. L'idée est qu'au lieu d'utiliser un int pour représenter un ensemble de valeurs, un type avec un ensemble de valeurs restreint 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 C) ou const en C ++ / C # pour spécifier ces valeurs. Par exemple

Trop d'ints pour compter!

Le problème est qu'il y en a beaucoup plus ints que les couleurs. Si le violet a la valeur 7 et que programme assigne une valeur de 15 à une variable alors c'est clairement un bug mais peut ne pas être détecté car 15 est une valeur valide pour un int.

Enums à 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 .:

instagram viewer

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

Le fait est que couleurs 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 le forciez à l'aide d'un transtypage.

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

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

Différences linguistiques

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

En C ++ cependant, il n'est pas nécessaire car couleurs 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

À quoi sert l'énumération?

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 se soucier de la façon dont elles sont stockées et accessibles. Cela réduit l'occurrence 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 au cours de ces quatre phases.

  1. rouge - Trafic arrêté.
  2. Tous les deux rouge et Jaune - La circulation est toujours arrêtée, mais les feux sont sur le point de passer au vert.
  3. vert - Le trafic peut se déplacer.
  4. 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. Celles-ci sont présentées sous forme de motif binaire ci-dessous en binaire où RYG représente les trois bits. Si R est 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 allumé et 2 = Jaune sur.

Avec cette fonction

Utilisation d'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 OU-ing des types feux de circulation.

En utilisant des énumérations, nous évitons les problèmes affectant d'autres bits à l'octet de commande 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 qui permet de définir ces bits en utilisation normale pourrait faire des ravages.

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

Conclusion

Les énumérations ont ces avantages:

  • Ils restreignent les valeurs que la variable enum peut prendre.
  • Ils vous obligent à réfléchir à toutes les valeurs possibles que l'énumération peut prendre.
  • Ils sont une constante plutôt qu'un nombre, augmentant la lisibilité du code source
instagram story viewer