In unserem gigantischem Projekt sind Records eigentlich nie initialisiert.
Meinst du damit, man geht einfach davon aus, dass Record-Felder automatisch genau so initialisiert werden wie Felder in Klassen? Also das Boolean immer False und Integer immer 0 sind? Dann wäre das allerdings grob fahrlässig und ebenso verwunderlich, dass es nicht schon früher zu solchen Problemen gekommen ist.
Wie macht ihr das? Gibt es da eine Lösung die mir nicht bekannt ist?
Eine von mir gern genutzte Alternative sind Konstruktoren, denen ich gleich ein paar Feldwerte als Parameter mitgeben kann.
Delphi-Quellcode:
type
TRQRec = record
isActiv: Boolean;
public
constructor Create(AisActiv: Boolean);
end;
constructor TRQRec.Create(AisActiv: Boolean);
begin
isActiv := AisActiv;
end;
procedure Test1;
var
RQRec: TRQRec;
begin
RQRec := TRQRec.Create(False);
if RQRec.isActiv then
begin
// do amazing things
end;
end;
Die mit neueren Delphi-Versionen verfügbaren
Managed Records bieten da noch weitere Möglichkeiten:
Delphi-Quellcode:
type
TRQRec = record
isActiv: Boolean;
public
class operator Initialize(out Dest: TRQRec);
end;
class operator TRQRec.Initialize(out Dest: TRQRec);
begin
Dest.isActiv := False;
end;
procedure Test1;
var
RQRec: TRQRec;
begin
if RQRec.isActiv then // ist immer False
begin
// do amazing things
end;
end;