Abréviation d'énumération, un type de variable enum 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 restreint de valeurs est utilisé à la place.
Par exemple, si nous utilisons les couleurs de l'arc-en-ciel, qui sont
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
Le problème avec cela est qu'il y a beaucoup plus de pouces que de couleurs. Si le violet a la valeur 7 et que 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.
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 conserver et si aucune valeur n'est fournie, le rouge sera 0, l'orange 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 facile à utiliser (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 cast.
Vous n'êtes pas coincé avec ces valeurs générées par le compilateur, vous pouvez leur attribuer 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.
En C, la déclaration de variable 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
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 bugs.