Thema: Records

Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.034 Beiträge
 
Delphi 12 Athens
 
#3

AW: Records

  Alt 3. Nov 2023, 09:46
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat