← Elementos del lenguaje Tipos Tipos/Enteros →


Clasificación de tipos

editar
 
Jerarquía de tipos en Ada

Los tipos de Ada se pueden clasificar en:

  • Compuesto:
    • Vector: Arrays, Strings.
    • Registros: record.

Declaración de tipos

editar

Para definir un tipo no estándar, se puede emplear el siguiente esquema:

declaración_tipo ::= type identificador is definición_tipo ;

Sirvan como ejemplos las siguientes definiciones de tipos:

-- Escalares discretos no estándar:
-- 
type TIndice is range 1..50;

-- Escalares reales no estándar:
-- 
type TPeso is digits 10;  -- Coma flotante con precisión de 10 cifras.
type TMasa is delta 0.01 range -12.0 .. 12.0; -- Coma fija 0.01 precis.

-- Enumeración:
-- 
type TColor is (ROJO, VERDE, AZUL);

-- Vectores:
-- 
type TMatriz is array (1..10, 1..10) of Float;
type TVector5 is array (TIndice range 5..10) of Float;
 
-- Registros:
-- 
type TVálvula is
  record
    Nombre: String(1..20);
    Abierta: Boolean;
    VelocidadLíquido: Float range 0.0 .. 30.0;
  end record;

-- Punteros:
-- 
type PEntero is access Integer;
-- Arrays irrestringidos. Tienen un número indefinido de
-- elementos. Es necesario especificar los límites al declarar
-- variables de ese tipo.
-- 
declare
  type TVectorIndef is array (Integer range <>) of Float;
   V: TVectorIndef (1..4);
begin
   V(1) := 10.28;
   V := (1.2, 1.5, 1.8, 1.3);
   V := (1 => 1.2, 2 => 1.7, others => 0.0);
end;

Algunos atributos aplicables a tipos

editar

Los atributos son operaciones predefinidas que se pueden aplicar a tipos, objetos y otras entidades. Por ejemplo estos son algunos atributos aplicables a tipos:

  • Last: Integer'Last es el máximo valor que puede tomar la variable de tipo Integer. También es el último valor de un tipo enumerado o del índice de un vector.
  • First: Integer'First es el mínimo valor que puede tomar la variable de tipo Integer. También es el primer valor de un tipo enumerado o del índice de un vector.
  • Range: Vector'Range indica el rango que ocupa la variable Vector, es decir, equivale a Vector'First..Vector'Last. En el caso de más de una dimensión, el valor Matriz'Range(1) indica el rango de la primera dimensión.
  • Succ: TColor'Succ(ROJO) indica el siguiente valor a ROJO que toma el tipo TColor, si no existe, se eleva la excepción Constraint_Error.
  • Pred: TDía'Pred(VIERNES) indica el anterior valor a VIERNES que toma el tipo TDía, si no existe, se eleva la excepción Constraint_Error.
  • Pos: El atributo Pos indica la posición ocupada por un determinado valor en un tipo enumeración. Por ejemplo: TColor'Pos(ROJO). La primera posición se considera 0.
  • Val: El atributo Val indica el valor que ocupa una determinada posición en un tipo enumeración. Por ejemplo: COLOR'Val(1).
  • Para identificar unívocamente un valor de un tipo enumeración se emplea TColor' (ROJO) y TIndicador'(ROJO) para distinguir el valor ROJO del tipo TColor o TIndicador.

Subtipos

editar

Los subtipos definen un subconjunto de los valores de un tipo determinado, pero no son un tipo distinto de su tipo base.

Superar una ambigüedad

editar

En el supuesto caso de que se quiera superar una ambigüedad en el tipo de una variable (debería evitarse) en un determinado instante, se puede optar por convertirlo (no recomendable) o cualificarlo:

  • Convertir el tipo, por ejemplo: Integer(I) convierte el número I a entero.
  • Cualificar el tipo, por ejemplo: Integer'(I) interpreta I como entero.

En ambos casos, el resultado es I como entero.

La cualificación sirve para cuando un literal no se sabe a qué tipo pertenece y se le indica de ese modo. Por ejemplo:

...
  type Color is (Rojo, Azul, Naranja);
  type Fruta is (Naranja, Pera, Melon);

  procedure Put (Una_Fruta : Fruta);
  procedure Put (Un_Color : Color);
...
begin

   Put (Color'(Naranja)); -- Llama a procedure Put (Un_Color : Color)
   Put (Fruta'(Naranja)); -- Llama a procedure Put(Una_Fruta : Fruta)
   Put (Naranja); -- Error de sintaxis, la llamada es ambigua
   Put (Rojo); -- Ok, llama a procedure Put (Un_Color : Color)
end;

Tipos avanzados

editar

Hay otros tipos más avanzados en Ada. Puedes optar por leer estos tipos ahora o por continuar el libro por la siguiente lección Objetos (variables y constantes).

Manual de referencia de Ada

editar