レコードを初期化する好ましい方法は何でしょうか?Delphi:レコードコンストラクタとファクトリ関数
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;
またはコンストラクタ:「ファクトリ関数」で
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;
私は、コンストラクタ物事をよりカプセル化されたことを感じるが、コードを読むときには、混乱することが容易になります。それは、無料に電話がないクラスのように見えます。入力するだけではありません...
なぜあなたはもう一方を優先しますか?
私はレコードコンストラクタも使用します。もしあなたが好きなら、あなたはそれを "作成"とは違う名前にすることができます。 –
FYI D2010で説明した内部エラーの問題が修正されたようです。 –
質問は単なるメソッドではなく、コンストラクタに関するものです。同じ表記法をコンストラクタに従えば、それがレコードかクラスのインスタンスかをコードから理解するのは難しいです。クラスの場合、メモリリークを意味するので、コードを参照する人は、実際にレコードかクラスかをチェックする必要があります。だから私はそれが悪い方法だと思う。 –