Programación en Ada/Tipos/Registros

De Wikilibros, la colección de libros de texto de contenido libre.
Saltar a: navegación, buscar
← Tipos/Strings Registros Tipos/Registros discriminados →


Un registro es un tipo que almacena varios campos de tipos distintos y que se identifican por su nombre. En C/C++ se llaman struct y en Pascal y Ada record.

type T_Sensor is
record
  Magnitud : Natural;
  Alarma   : Boolean;
end record;

Acceso a los campos[editar]

Para acceder a los campos de un registro se usa la clásica notación registro.componente:

procedure Medir_temperatura is
  Sensor_temperatura : T_Sensor;
begin
  Sensor_temperatura.Magnitud := 23;
  Sensor_temperatura.Alarma := False;
  -- ...
  if Sensor_temperatura.Alarma then
     Put_Line ("Alarma de temperatura");
  end if;
end;

Para asignar valores a todos los componentes se puede utilizar un agregado, lo cual es útil para asegurarnos de que no dejamos ninguno sin darle un valor:

procedure Asignar_temperatura is
  Sensor_temperatura : T_Sensor;
begin
  Sensor_temperatura :=
    (Magnitud => 23,
     Alarma   => False);
end;

También es posible dar un valor inicial a algunos o todos los componentes de un registro de modo que todos los objetos de ese tipo se inicialicen automáticamente con esos valores:

type T_Sensor is
record
  Magnitud : Natural := 0;
  Alarma   : Boolean := False;
end record;

Registro nulo[editar]

El registro nulo se puede usar cuando se necesita un tipo que no almacene ningún dato (aunque parezca raro hay casos en los que es útil, como instanciar un genérico que pide un tipo, para el cual no tenemos ningún dato que pasarle). Hay dos maneras de declarar un registro nulo:

type Registro_Nulo
is record
   null;
end record; 
type Registro_Nulo is null record;

Ambas definiciones son semánticamente idénticas, la segunda es simplemente una sintaxis abreviada.

La declaración de una variable o constante de este tipo sería:

Nulo : constant Registro_Nulo := (null record);

Tipos especiales de registros[editar]

Manual de referencia de Ada[editar]