Zitat:
Der Code funktioniert tatsächlich aber auch, wenn die erste if-Abfrage nicht zutrifft. Dann wird halt ein leerer String zurückgegeben.
Es wird eben nur
zufällig ein Leerstring zurückgegeben, da du nicht
explizit einen Leerstring zuweist.
Du mußt grundsätzlich davon ausgehen, daß ein Result niemals initialisiert ist.
Bei Strings, Interfaces und dynamischen Arrays ist meisten zufällig ein '' zugewiesen, da diese Typen eine automatische Speicherverwaltung besitzen und demnach automatisch vom Delphi initialisiert werden.
Allerdings werden diese Results (String, Interface und dyn. Array) intern nicht als Result-Parameter behandelt, sondern werden als VAR-Parameter.
Die Initialisierung deines Strings befindet sich außerdem nicht in deiner Funktion, sondern beim Aufrufer, bzw. da, woran das Result zugewiesen wird, was eben bei mehrfachen Aufrufen, z.B. in einer Schleife zu Problemen führt, da diese Stringvariable nur einmal zu Beginn initialisiert wird und nicht bei jedem Aufruf.
Hier würdest du doch bestimmt
x
in der MessageBox erwarten?
Ich allerdings nicht.
Delphi-Quellcode:
function Test: string;
begin
Result := Result + 'x';
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
S: string;
begin
for i := 1 to 10 do
S := Test;
ShowMessage(S);
end;