Programación en Ada/Tipos/Enumeraciones

De Wikilibros, la colección de libros de texto de contenido libre.
← Tipos/Enteros Enumeraciones Tipos/Coma flotante →


Un tipo enumeración es una lista definida de los posibles valores que puede adoptar un objeto de ese tipo. La declaración:

 type Color_Primario is (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.

Operadores y atributos predefinidos[editar]

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.

type Luz_de_Tráfico is (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).

Literales carácter[editar]

Una característica bastante única de Ada es la posibilidad de usar literales caracter como literales de una enumeración.

 type ABC is ('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 "&".

type Mi_Caracter is (No_Caracter, 'a', Literal, 'z');
type Mi_String is array (Positive range <>) of Mi_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.

Tipo boolean[editar]

El tipo predefinido boolean es una enumeración definida en el paquete Standard de este modo:

type Boolean is (False, True);

Por esta razón el tipo boolean tiene todos los atributos definidos para cualquier otra enumeración.

Subtipos de enumeración[editar]

Se puede usar un rango para definir un subtipo sobre una enumeración:

  subtype Letra_Mayúscula is Character range 'A' .. 'Z';
  subtype Color_Frío is Color_Primario range Verde .. Azul;

Manual de referencia de Ada[editar]