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
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
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). 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
Manual de referencia de Ada