Record, es una de las características distintivas de Delphi (Pascal) y es realmente útil a la hora de codificar nuestras aplicaciones.
En Delphi, record nos recopila un conjunto de datos de diferentes tipos en una estructura con un nombre otorgado por el programador.
La forma de referenciar la estructura de un record es:
type Name = {packed} Record
Fields Declarations ...
end;
...
record.field
...
La palabra clave record, posee una declaración opcional packed, que le comunica a Delphi que minimice el almacenamiento de memoria dado al registro.
Esta reducción en el almacenamiento de memoria puede afectar al rendimiento, cuando los datos no están alineados con limites apropiados de 2, 4 u 8 bytes.
Tipos de record, declaraciones
Existen dos tipos de campos o fields para esta estructura:
- Declaraciones de capos o fields
- Declaraciones variables de campos con Case
Declaraciones de capos o fields
Estas son declaraciones estándar de Delphi, como por ejemplo:
type
TPersonas = packed record
nombre: string[20];
apellido: string[20];
edad: integer;
domicilio: string[100];
ciudad: string[20];
codigopostal: integer;
end;
...
with TPersonas do
begin
nombre := 'Carlos';
apellido := Perez;
edad := 44;
domicilio := 'Av. Colón 8945';
ciudad := 'Bogotá';
codigopostal := 956545;
end;
...
Showmessage(TPersonas.nombre + ' ' + TPersonas.apellido);
Declaraciones variables de campos con Case
Esta declaración permite diferentes tipos de datos alternativos que se superponen entre sí según la declaración del case.
Por ejemplo, si tenemos un registro de medidas, éste puede contener campos diferentes si es un cuadrado o un circulo, por ejemplo:
type
TObjeto = record
nombreobj: string;
Case esCirculo : Boolean of
True :
(diametro: extended);
False :
(ancho: extended;
alto: extended);
end;
...
TObjeto.nombreobj := 'Circulo Rojo';
TObjeto.esCirculo := True;
TObjeto.diametro := 52.29;
TObjeto.nombreobj := 'Cuadrado Negro';
TObjeto.esCirculo := False;
TObjeto.ancho:= 19;
TObjeto.alto:= 49;
// Esto provocará una exception
TObjeto.nombreobj := 'Circulo Rojo';
TObjeto.esCirculo := False;
TObjeto.diametro := 52.29; // Este Field no está permitido si esCirculo := False
Recuerde el uso de la palabra clave With, con ella podemos abordar a los campos son la necesidad de prefijar el nombre del registro en cada línea. por ejemplo:
with TObjeto do
begin
nombreobj := 'Circulo Rojo';
esCirculo := True;
diametro := 52.29;
end;
with TObjeto do
begin
nombreobj := 'Cuadrado Negro';
esCirculo := False;
ancho:= 19;
alto:= 49;
begin
A diferencia de otros lenguajes orientados a objetos como Java, el registro en Delphi, proporciona un mejor rendimiento al pasar grupos de datos con respecto a las clases de los otros lenguajes.