AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TStringlist von function() zurückgeben - nicht möglich?
Thema durchsuchen
Ansicht
Themen-Optionen

TStringlist von function() zurückgeben - nicht möglich?

Ein Thema von JanWe · begonnen am 10. Mai 2022 · letzter Beitrag vom 11. Mai 2022
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

AW: TStringlist von function() zurückgeben - nicht möglich?

  Alt 11. Mai 2022, 12:11
Nur mal ganz schnell rausgehauen: um eine Stringlist zu übergeben, könnte "DelimitedText" helfen.

Function BlaBla(a, b : TStrings): string;
begin
SList := TStringList.Create;
try
SList.Delimiter := '|';
SList.StrictDelimiter := true;

// hier die Manipuilationen der Ergebnisliste

SList.Add( a[0]+b[0] );
....

ResultStr := SList.DelimitedText;
finally
SList.Free;
end
Result := ResultStr;
end

und "auf der anderen Seite" wieder in eine Liste umwandeln

SList := TStringList.Create;
try
SList.Delimiter := '|';
SList.StrictDelimiter := true;
SList.DelimitedText := XXX;

// Hier der Zugriff auf die Elemente aus SList

finally
SList.free;
end

Dann ist die Rückgabe ein String. Man muss sich halt nur einen guten "Delimiter" ausdenken, der garantiert nicht in den Werten vorkommt. Ich verwende gern "|", weil Komma, Semikolon und ähnliches gerne mal in den Werten steht. Das ist natürlich nicht das schnellste, ist sicher nicht optimal und taugt auch nur bei begrenzten Mengen, vermeidet aber die oben erwähnten Gefahren und ist einfach einzusetzen
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: TStringlist von function() zurückgeben - nicht möglich?

  Alt 11. Mai 2022, 13:17
Bei der "const"-Debatte verweise ich mal auf diesen Link

Pauschal verwende ich const bei jedem Parameter. Schadet nicht und im Zweifel vergesse ich es nicht bei Typen, bei denen es durch den const-Parameter eine Optimierung gibt.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.147 Beiträge
 
Delphi 12 Athens
 
#13

AW: TStringlist von function() zurückgeben - nicht möglich?

  Alt 11. Mai 2022, 21:54
Ja, natürlich darf man das Objekt (TStringList) nicht intern freigeben, wenn man sie zurückgeben will.
Aber dann muß man auch dafür sorgen, dass der Aufrufer die Liste freigibt.

Ist aber auch "unschön", weil man ohne gute Dokumentation nie weiß, ob das Result einer aufgerufenen Methode freigegeben werden muß, oder nicht.
Darum sollte man besser den Namen der Methode so wählen, damit daraus erkennbar ist, dass diese Liste "erstellt" wird. (z.B. Create im Name)

Alternativ speichert man sich das Result intern (global) und gibt sie dann später frei.
Hier wird es dann spaßig, wenn gleichzeitig mehrere Rückgaben dieser Methode verwendet werden sollen. (vor allem, wenn dann alles immer die Selbe Liste zurückgibt und somit der vorherige Aufruf ungültig würde)

Sicherheitshalber machen es daher Viele so, dass man die Liste rein gibt, welche gefüllt werden soll.



Ansonsten:

* z.B. eine IStringList, IStrings oder sowas als Rückgabe, da Interfaces mit automatischer Freigabe

* bzw. ich verwende für sowas ein TArray<string> als Result
* * wird automatisch Speicherverwaltet
* * und wenn der Aufrufer es braucht, kann er es direkt in ein For-In geben, oder in eine eigene StringList per AddStrings übernehmen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz