Hallo,
ich habe mal eine eher theoretische Frage. Mal angenommen, ich will ein Objekt vom Typ TStringlist in einer Prozedur bearbeiten und bearbeitet zurückbekommen. Muss ich dann der Prozedur die Variable als var-Parameter übergeben oder geht es auch als Wertparameter?
Ich frage deshalb, weil der Prozedur in beiden Fällen ein Zeiger übergeben wird. Wenn dieser nicht geändert wird, sondern nur der Speicher auf den gezeigt wird, so kommt das Ergebnis doch in beiden Fällen im aufrufenden Programmteil an.
Was ist also zu empfehlen?
TStringList als var Parameter?
-
- Beiträge: 36
- Registriert: Fr 3. Mai 2019, 17:45
- OS, Lazarus, FPC: Win8.1 (L 2.2.4 FPC 3.2.2)
- CPU-Target: 64Bit
- Wohnort: Saarland
TStringList als var Parameter?
Viele Grüße
Gerold
Gerold
Re: TStringList als var Parameter?
Ja, du brauchst dafür keinen var Parameter.
Es gibt aber schon einen Unterschied.
Testen Sie selbst:
Im "richtigen Leben" noch auf den Speicher achten!
Es gibt aber schon einen Unterschied.
Testen Sie selbst:
Code: Alles auswählen
procedure TesteVar(var AList: TStringList);
begin
AList:=TStringList.Create;
AList.Add('testen var');
end;
procedure Teste(AList: TStringList);
begin
AList:=TStringList.Create;
AList.Add('testen');
end;
procedure TForm1.Button1Click(Sender: TObject);
var Ast:TStringList;
begin
Ast:=TStringList.Create;
TesteVar(Ast);
Teste(Ast);
Memo1.Text:=Ast.Text;
end;
-
- Beiträge: 830
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: TStringList als var Parameter?
Für Klasseninstanzen musst du var (oder auch out) für Parameter nur benutzen, wenn du die Instanz ändern möchtest (also zum Beispiel du aVarArg := TStringList.Create). Ansonsten reicht es einen normalen by-Value Parameter zu nutzen. Selbst const oder noch schlimmer constref ist dafür nicht nötig.KreuzBlick hat geschrieben: ↑Mi 9. Sep 2020, 16:08Hallo,
ich habe mal eine eher theoretische Frage. Mal angenommen, ich will ein Objekt vom Typ TStringlist in einer Prozedur bearbeiten und bearbeitet zurückbekommen. Muss ich dann der Prozedur die Variable als var-Parameter übergeben oder geht es auch als Wertparameter?
Ich frage deshalb, weil der Prozedur in beiden Fällen ein Zeiger übergeben wird. Wenn dieser nicht geändert wird, sondern nur der Speicher auf den gezeigt wird, so kommt das Ergebnis doch in beiden Fällen im aufrufenden Programmteil an.
Was ist also zu empfehlen?
FPC Compiler Entwickler