Liebe Delphi-Gemeinde,
ich mag im Design meiner Objekte das Pattern des Fluent Design sehr gerne und gestalte meine Methoden deshalb gerne damit. Ich meine damit also etwa ein solches Gebilde:
Result := CreateSomeInterface.DoSomething('withParameter').DoSomethingOther.ConvertEverythingToString;
Das ist an manchen Stellen sehr praktisch und macht den Code in meinen Augen etwas schöner, vor allem, wenn man mit Interfaces statt mit Objekten arbeitet.
Nun frage ich mich, ob man das auch mit Records machen kann, bzw. ob das sinnvoll ist.
Angenommen ich habe folgendes:
Delphi-Quellcode:
type
Tfluent = record
variable: string;
function DoSomething(const mParameter: string): Tfluent;
end;
function Tfluent.DoSomething(const mParameter: string): Tfluent;
begin
variable := variable + mParameter;
Result := Self;
end;
Soweit ich das verstehe, würde das
Result := Self;
bei Records immer dazu führen, dass der komplette Record kopiert wird, da eine Übergabe bei Records ja "als Wert" und nicht "als Zeiger" funktioniert.
Damit wäre das Fluent Design bei Records nicht sinnvoll und würde ständig eine Kopiererei der Daten verursachen. Ist das so, oder gibt es einen Trick? Wie macht ihr das?
Ich fände die Records deshalb sehr schön, weil man z.B. mit Operator Overloading sich dann eine Methode "ConvertEverthingToString" sparen könnte, was meines Wissens mit Objekten/Interfaces bislang noch nicht geht.
Viele Grüße
Harald