Skip to content

Delphi Record, dos formas de declararlo

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.