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 que puede adoptar un objeto de ese tipo. La declaración:
typeColor_Primariois(Rojo, Verde, Azul);
establece que a un objeto del tipo Color_Primario se le puede asignar cualquiera de los tres valores indicados, y ningún otro valor. Como los tipos numéricos, donde por ejemplo 1 es un literal entero, Rojo, Verde y Azul son los llamados literales del tipo.
Las enumeraciones son uno de los tipos discretos, los otros son los tipos enteros.
Contenido |
[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;