Entonces, ¿cuál será la forma preferida de inicializar registros?Delphi: Generador de registros frente a la función de fábrica
Con una 'función de fábrica':
TMyRecord = record
valueX: integer;
valueY: integer;
end;
function MyRecord(const AValueX, AValueY: integer): TMyRecord;
begin
result.valueX := AValueX;
result.valueY := AValueY;
end;
var
myrec: TMyRecord;
begin
myrec := MyRecord(1, 2);
end;
o un constructor:
TMyRecord = record
valueX: integer;
valueY: integer;
constructor Create(const AValueX, AValueY: integer);
end;
constructor TMyRecord.Create(const AValueX, AValueY: integer);
begin
self.valueX := AValueX;
self.valueY := AValueY;
end;
var
myrec: TMyRecord;
begin
myrec := TMyRecord.Create(1, 2);
end;
siento que las cosas constructor más encapsulados, pero hace que sea fácil confundirse al leer el código. Lo hace parecer una clase que no tiene una llamada gratuita. También es más para escribir ...
¿Por qué preferirías una sobre la otra?
También uso constructores de registros. Puedes nombrar algo diferente de "Crear" si lo deseas, para que sepas que es un registro. –
FYI El problema de error interno que ha mencionado parece haberse solucionado en D2010. –
La pregunta es sobre el constructor, no solo un método. Si seguimos la misma notación para el constructor, es difícil de entender a partir del código si es un registro o instancia de clase. Para la clase, significa pérdida de memoria, por lo que cualquier persona que vea ese código deberá verificar si realmente es un registro o una clase. Entonces creo que es una mala manera. –