Programación en Ada / Tipos / Enumeraciones
De Wikilibros, la colección de libros de texto de contenido libre.
Un tipo enumeración es una lista definida de los posibles valores:
typeColor_Primariois(Rojo, Verde, Azul);
Las enumeraciones son uno de los tipos discretos, los otros son los tipos enteros.
Como los tipos numéricos, donde por ejemplo 1 es un literal entero, Rojo, Verde y Azul son los llamados literales del tipo. No hay otros valores asignables a un objeto de este tipo.
Tabla de contenidos |
[editar] Operadores y atributos predefinidos
Aparte del operador de igualdad ("="), los tipos enumeración tienen predefinidos todos los operadores de orden: "<", "<=", "=", "/=", ">=", ">"; donde la relación de orden viene dada implicitamente por la secuencia de los literales: cada literal tiene una posición, empezando por 0 para el primero, que se incrementa en uno para cada sucesor. Esta posición se puede obtener mediante el atributo 'Pos; el inverso es 'Val, que devuelve el valor correspondiente a una posición. En nuestro ejemplo:
Color_Primario'Pos (Rojo) = 0 Color_Primario'Val (0) = Rojo
Los literales pueden sobrecargarse, es decir, puede haber otro tipo con los mismos literales.
typeLuz_de_Tráficois(Rojo, Ambar, Verde);
Normalmente se puede determinar por el contexto a qué tipo pertenece el literal Rojo. Cuando es imposible, el programador ha de usar una expresión de desambiguación: Tipo'(Valor).
[editar] Literales carácter
Una característica bastante única de Ada es la posibilidad de usar literales caracter como literales de una enumeración.
typeABCis('A', 'B', 'C');
El literal 'A' no tiene mucho que ver con el literal 'A' del tipo predefinido Character (o Wide_Character).
Todo tipo que tiene al menos un literal carácter es un tipo carácter. Para todo tipo carácter, existen literales de cadena y el operador de concatenación predefinido "&".
typeMi_Caracteris(No_Caracter, 'a', Literal, 'z');typeMi_Stringisarray(Positiverange<>)ofMi_Caracter; S: Mi_String := "aa" & Literal & "za" & 'z'; T: Mi_String := ('a', 'a', Literal, 'z', 'a', 'z');
En este ejemplo, S y T contienen el mismo valor.
El tipo predefinido Character se define de este modo en el paquete Standard.
[editar] Tipo boolean
El tipo predefinido boolean es una enumeración definida en el paquete Standard de este modo:
typeBooleanis(False, True);
Por esta razón el tipo boolean tiene todos los atributos definidos para cualquier otra enumeración.
[editar] Subtipos de enumeración
Se puede usar un rango para definir un subtipo sobre una enumeración:
subtypeLetra_MayúsculaisCharacterrange'A' .. 'Z';subtypeColor_FríoisColor_PrimariorangeVerde .. Azul;

