Corto para enumeración, se puede encontrar un tipo de variable enum en C (ANSI, no en el K & amp; amp; R original), C ++ y C #. La idea es que, en lugar de usar una int para representar un conjunto de valores, se usa un tipo con un conjunto restringido de valores.
Por ejemplo, si usamos los colores del arco iris, que son
- Rojo
- Naranja
- Amarillo
- Verde
- Azul
- Índigo
- Violeta
Video destacado
Si enums no existió & amp; apos; t, puede usar un #define (en C) o const en C ++ / C # para especificar estos valores. Por ejemplo
Demasiadas entradas para contar!
El problema con esto es que hay muchas más ints que colores. Si violet 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 una int.
Enums to the Rescue
Un enumerar es un tipo definido por el usuario que consiste en un conjunto de constantes con nombre llamadas enumeradores. Los colores del arco iris se mapearían así.:
Ahora, internamente, el compilador usará una int para mantenerlos y si no se proporcionan valores, el rojo será 0, el naranja es 1, etc.
¿Cuál es el beneficio de un Enum??
El punto es que los colores del arco iris son un tipo y solo se pueden asignar otras variables del mismo tipo. C es más fácil (es decir, menos estrictamente escrito), pero C ++ y C # ganaron & amp; apos; t permiten la asignación a menos que la fuerce usando un yeso.
Usted está & amp; apos; t atascado con estos valores generados por el compilador, puede asignarles su propia constante entera como se muestra aquí.
Tener azul e índigo con el mismo valor es un error que los enumeradores pueden incluir sinónimos como escarlata y carmesí.
Diferencias de idioma
En C, la declaración variable debe ir precedida de la palabra enum como en
Sin embargo, en C ++, no es necesario ya que los colores del arco iris son 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 Enums??
El uso de enums 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 semáforos cambia en estas cuatro fases.
- Rojo – Tráfico detenido.
- Ambos Rojo y Amarillo – El tráfico aún se detuvo, pero las luces a punto de cambiar a verde.
- Verde – El tráfico puede moverse.
- 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, it & amp;apos;Es fácil ver que los cuatro estados anteriores corresponden a los valores 4 = Rojo en, 6 = Rojo + Amarillo ambos en, 1 = Verde encendido y 2 = Amarillo en.
Con esta función
Usando una clase en lugar de Enums
En C ++ y C # we & amp; apos; d necesitamos crear una clase y luego sobrecargar el operador | para permitir el OR de los tipos de semáforos .
Al usar enums evitamos problemas con la asignación de otros bits al byte de control de la bombilla. Puede ser que algunos de los otros bits controlen la autoevaluación o un & amp; quot; Green Lane & amp; quot; interruptor. En ese caso, un error que permite establecer estos bits en el uso normal podría causar estragos.
Sin duda, nosotros & amp; apos; d enmascaramos los bits en la función SetTrafficlights () para que no importa en qué valor se pase, solo se cambian los tres bits inferiores.
Conclusión
Los enumeradores tienen estos beneficios:
- Restringen los valores que puede tomar la variable enum.
- Te obligan a pensar en todos los valores posibles que puede tomar el enum.
- Son una constante en lugar de un número, lo que aumenta la legibilidad del código fuente
& amp; # x203A; Informática