Skip to content

Records en Delphi: Un Recorrido Detallado

En el mundo de la programación Delphi, los records son una herramienta poderosa y flexible para la gestión de datos.

En este artículo, exploraremos en profundidad qué son los records en Delphi, cómo se utilizan, y proporcionaremos ejemplos de código para ilustrar su aplicación práctica.

¿Qué son los Records?

Un record en Delphi es un tipo de datos compuesto que agrupa variables relacionadas bajo un único nombre.

A diferencia de las clases, los records son tipos de datos de valor y no de referencia, lo que significa que cuando se asignan o pasan, se copia su contenido, no su referencia.

Declaración de un Record

La declaración de un record en Delphi es simple. Por ejemplo:

type
  TPerson = record
    FirstName: string;
    LastName: string;
    Age: Integer;
  end;

Aquí, TPerson es un record que contiene tres campos: FirstName, LastName, y Age.

Inicialización y Uso de los Records

Para usar un record, simplemente decláralo y asigna valores a sus campos:

var
  Person: TPerson;
begin
  Person.FirstName := 'Juan';
  Person.LastName := 'Pérez';
  Person.Age := 30;
end;

Métodos en Records

A partir de Delphi 2006, los records pueden contener métodos, incluidos constructores y destructores.

Esto permite encapsular la funcionalidad directamente dentro del record.

Ejemplo con Métodos

Consideremos un record con un método:

type
  TPerson = record
    FirstName, LastName: string;
    Age: Integer;
    function FullName: string;
  end;

function TPerson.FullName: string;
begin
  Result := FirstName + ' ' + LastName;
end;

Aquí, FullName es un método que devuelve el nombre completo de la persona.

Records vs. Classes

Aunque los records y las clases pueden parecer similares, hay diferencias clave:

  • Almacenamiento: Los records son tipos de valor y las clases son tipos de referencia.
  • Manejo de Memoria: La memoria para un record se asigna automáticamente en la pila, mientras que las clases requieren asignación dinámica en el montón.
  • Herencia: Los records no admiten herencia.

Records Avanzados

Delphi permite características avanzadas en records, como:

Records con Constructores y Destructores

Los records pueden tener constructores y destructores para inicializar y limpiar recursos:

type
  TPerson = record
    FirstName, LastName: string;
    constructor Create(const FName, LName: string);
  end;

constructor TPerson.Create(const FName, LName: string);
begin
  FirstName := FName;
  LastName := LName;
end;

Records con Operadores Sobrecargados

Delphi permite la sobrecarga de operadores dentro de un record.

Por ejemplo, sobrecargar el operador + para concatenar dos records de tipo TPerson:

type
  TPerson = record
    FirstName, LastName: string;
    class operator Add(a, b: TPerson): TPerson;
  end;

class operator TPerson.Add(a, b: TPerson): TPerson;
begin
  Result.FirstName := a.FirstName + ' & ' + b.FirstName;
  Result.LastName := a.LastName + ' & ' + b.LastName;
end;

Records Anidados

Los records pueden anidarse dentro de otros records, proporcionando una manera de estructurar datos complejos:

type
  TAddress = record
    Street, City: string;
  end;

  TPerson = record
    Name: string;
    Address: TAddress;
  end;

Records y Tipos Anónimos

Delphi también admite records anónimos, lo que permite declarar un record al vuelo sin necesidad de una definición de tipo previa:

var
  AnonRecord: record
    Name: string;
    Age: Integer;
  end;

Los records en Delphi ofrecen una forma eficiente y potente de agrupar datos relacionados.

Con la capacidad de incluir métodos, constructores y operadores sobrecargados, se convierten en una herramienta versátil en el arsenal de cualquier programador Delphi.

Ya sea que estés manejando datos simples o estructurando tipos complejos, los records son una opción que vale la pena explorar.