Programación en Ada/Tipos/Enumeraciones

← 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