Delphi: Konstruktor rekordów a funkcja fabryczna
Jaki będzie preferowany sposób inicjowania rekordów?
Z „funkcją fabryczną”:
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;
lub konstruktor:
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;
Uważam, że konstruktor jest bardziej enkapsulowany, ale ułatwia odczytanie kodu. To sprawia, że wygląda jak klasa, w której nie ma połączenia do darmowego. To także więcej do pisania ...
Dlaczego wolisz jeden nad drugim?