¿Qué es una enumeración en lenguajes de programación?

Corto para enumeración, una enumeración tipo variable se puede encontrar en C (ANSI, no en el K&R original), C ++ y C#. La idea es que en lugar de usar un En t para representar un conjunto de valores, se utiliza un tipo con un conjunto restringido de valores.

Por ejemplo, si usamos los colores del arco iris, que son

  1. rojo
  2. naranja
  3. Amarillo
  4. Verde
  5. Azul
  6. Índigo
  7. Violeta

Si las enumeraciones no existieran, podría usar un #definir (en C) o const en C ++ / C # para especificar estos valores. P.ej

¡Demasiadas acciones para contar!

El problema con esto es que hay muchos más ints que los colores Si violeta tiene el valor 7, y el programa asigna un valor de 15 a una variable, entonces es claramente un error, pero podría no detectarse ya que 15 es un valor válido para un int.

Enums to the Rescue

Una enumeración es un tipo definido por el usuario que consiste en un conjunto de constantes con nombre llamadas enumeradores. Los colores del arcoiris se mapearían así:

Ahora internamente, el compilador usará un int para mantener estos y si no se proporcionan valores, el rojo será 0, el naranja es 1, etc.

instagram viewer

El caso es que colores del arcoiris es un tipo y solo se le pueden asignar otras variables del mismo tipo. C es más fácil (es decir, está escrito de forma menos estricta), pero C ++ y C # no permitirán la asignación a menos que la fuerce utilizando un molde.

No estás atrapado con estos compilador valores generados, puede asignarles su propia constante entera como se muestra aquí.

Tener azul e índigo con el mismo valor no es un error, ya que los enumeradores pueden incluir sinónimos como escarlata y carmesí.

Diferencias de idioma

En C, el variable la declaración debe ir precedida de la palabra enumeración como en

Sin embargo, en C ++, no es necesario ya que colores del arcoiris es un tipo distinto que no necesita el prefijo de tipo enum.

En C # se accede a los valores por el nombre del tipo como en

¿Cuál es el punto de enumeraciones?

El uso de enumeraciones aumenta el nivel de abstracción y permite al programador pensar en lo que significan los valores en lugar de preocuparse por cómo se almacenan y acceden. Esto reduce la aparición de errores.

Aquí hay un ejemplo. Tenemos un conjunto de semáforos con tres bombillas. rojo, amarillo y verde. En el Reino Unido, la secuencia de los semáforos cambia en estas cuatro fases.

  1. rojo - Tráfico detenido.
  2. Ambos rojo y Amarillo - El tráfico todavía se detuvo, pero las luces están a punto de cambiar a verde.
  3. Verde - El tráfico puede moverse.
  4. Amarillo - Advertencia de cambio inminente a rojo.

Ejemplo de semáforo

Las luces se controlan escribiendo en la parte inferior tres bits de un byte de control. Estos se presentan como un patrón de bits a continuación en binario donde RYG representa los tres bits. Si R es 1, la luz roja está encendida, etc.

En este caso, es fácil ver que los cuatro estados anteriores corresponden a los valores 4 = rojo encendido, 6 = rojo + Amarillo ambos en, 1 = Verde encendido y 2 = Amarillo en.

Con esta función

Usar una clase en lugar de enumeraciones

En C ++ y C # necesitaríamos crear una clase y luego sobrecargar el operador | permitir OR-ing de tipos semáforos.

Al usar enumeraciones, evitamos problemas con la asignación de otros bits al byte de control de bulbo. Puede ser que algunos de los otros bits controlen la autocomprobación o un interruptor "Green Lane". En ese caso, un error que permita que estos bits se establezcan en uso normal podría causar estragos.

Para estar seguros, enmascararíamos los bits en el SetTrafficlights ()función así que no importa qué valor se pase, solo se cambian los tres bits inferiores.

Conclusión

Las enumeraciones tienen estos beneficios:

  • Restringen los valores que puede tomar la variable enum.
  • Te obligan a pensar en todos los valores posibles que puede tomar la enumeración.
  • Son una constante más que un número, lo que aumenta la legibilidad de código fuente
instagram story viewer