Einzelnen Beitrag anzeigen

inriz

Registriert seit: 18. Okt 2005
15 Beiträge
 
#1

Komplexe Datentypen als Rückgabewert einer Funktion

  Alt 14. Dez 2005, 11:40
Hallo,

folgendes Sachverhalt wurde mir zugetragen um meinen Code zu verbessern.
Ich habe eine Funktion namens GetTokenList. Diese Funktion nimmt einen String entgegen (separiert durch ':'), splittet diesen
anhand des Separators auf und schreibt alles in ein Objekt vom Typ TStringList.
Diese TStringList wird in der Funktion allokiert und die Referenz dieses Objektes wird zurückgegeben.
Delphi-Quellcode:
function TfmAppPanel.GetTokenList(sCommand, sSeparator : string) : TStringList;
var
  sTmp : string;
  sCurrentToken : string;
  iPos : Integer;
  iRest : Integer;
  TokenList : TStringList;
begin
  Result := nil;
  sTmp := sCommand;
  TokenList := TStringList.Create;

  iPos := Pos(sSeparator, sTmp);
  if iPos > 0 then
  begin
    repeat
      iRest := Length(sTmp) - iPos;
      sCurrentToken := LeftStr(sTmp, iPos - 1); // hier können laufzeitfehler entstehen ...
      TokenList.Add(sCurrentToken);
      sTmp := RightStr(sTmp, iRest);
      iPos := Pos(sSeparator, sTmp);
    until not (iPos > 0);

    if Length(sTmp) > 0 then
    begin
      TokenList.Add(sTmp);
    end;
    Result := TokenList;
  end;
end;
Nun wurde mir gesagt, gib anstatt der Referenz, TokenList.Text zurück. Der String, der sich in TokenList.Text befindet kann einer anderen Liste zugewiesen werden(AList.Text := GetTokenList(...)) und man kann normal mit der Liste (Alist) wie gewohnt weiterarbeiten. Meine Frage ist, macht diese Änderung Sinn, wenn ja? Warum?
Mein Kenntnisstand sagt, Allokation ist mit viel Rechenleistung behaftet und bei der mir zugetragenen Lösung muss ich noch eine weitere TStringList allokieren, was für mich keinen Sinn ergibt, da es ja Pointer gibt. Wie sieht ihr das? Ist die Lösung berechtigt? Gibt es andere Lösungen?

Gruß inriz
  Mit Zitat antworten Zitat