Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TStringList als Result einer Funktion (https://www.delphipraxis.net/181498-tstringlist-als-result-einer-funktion.html)

Captnemo 20. Aug 2014 09:46

AW: TStringList als Result einer Funktion
 
Zitat:

Zitat von himitsu (Beitrag 1269207)
PS: Auch wenn du intern eine TStringList erzeugst ... Es macht sich dennoch oft besser, wenn das Result-Typ ein TStrings ist.

Kannst du mir auch sagen warum das sich besser macht?

TheFrog 20. Aug 2014 09:49

AW: TStringList als Result einer Funktion
 
Werde in Zukunft auf Dein Profil achten :)

himitsu 20. Aug 2014 09:59

AW: TStringList als Result einer Funktion
 
Ihr dürft im DP-Projekt gern für meinen Feature-Request voten. Ich hatte mir mal gewünscht, daß entweder die Profilangabe als Default erstmal vorausgewählt ist, oder daß diese Angabe per Vorauswahl leer ist.

Typkompatibilität, vorallem wenn man diese StringListe an eine andere Funktion übergeben will.

Stell dir mal vor jemand hätte das Assign als
Delphi-Quellcode:
procedure Assign(Value: TStringList);
deklariert und schön könnte man nur noch TStringLists und nix Anderes mehr übergeben. Darum am Besten gleich durchgängig den kleinsten gemeinsamen Nenner nutzen. (siehe TMemo.Lines ... da ist z.B. eigentlich ein TMemoStrings drin)
Bei deinem Result kommt es ja nur auf die Textinhalte an und es ist vollkommen egal wo die gespeichert sind und für den Zugriff daraus reichen die Schnittstellen des TStrings auch vollkommen aus.

Captnemo 20. Aug 2014 10:05

AW: TStringList als Result einer Funktion
 
Zitat:

Zitat von himitsu (Beitrag 1269212)
Ihr dürft im DP-Projekt gern für meinen Feature-Request voten. Ich hatte mir mal gewünscht, daß entweder die Profilangabe als Default erstmal vorausgewählt ist, oder daß diese Angabe per Vorauswahl leer ist.

:thumb: Mach ich gleich mal :thumb:

Zitat:

Zitat von himitsu (Beitrag 1269212)
Typkompatibilität, vorallem wenn man diese StringListe an eine andere Funktion übergeben will.

Herzlichen Dank.

Perlsau 20. Aug 2014 11:42

AW: TStringList als Result einer Funktion
 
Delphi-Quellcode:
function GetTiere: String;
Var
  Liste: TStrings;
begin
  Liste:=TStringList.create;
  Try
    Liste.Add('Hund');
    Liste.Add('Katze');
    Liste.Add('Maus');
    Result := Liste.Text;
  Finally
    Liste.Free;
  End;
end;

// Aufruf:
Listbox1.Items.Text := GetTiere;

DeddyH 20. Aug 2014 12:09

AW: TStringList als Result einer Funktion
 
Wie schon eingangs erwähnt:
Delphi-Quellcode:
procedure GetTiere(const Dest: TStrings);
begin
  Assert(Assigned(Dest));
  Dest.BeginUpdate;
  try
    Dest.Clear;
    Dest.Add('Hund');
    Dest.Add('Katze');
    Dest.Add('Maus');
  finally
    Dest.EndUpdate;
  end;
end;

GetTiere(ListBox1.Items);

p80286 20. Aug 2014 14:44

AW: TStringList als Result einer Funktion
 
Zitat:

Zitat von DeddyH (Beitrag 1269232)
Wie schon eingangs erwähnt:
Delphi-Quellcode:
procedure GetTiere(const Dest: TStrings);

Hält Dir zusätzlich die Möglichkeit offen mit
Delphi-Quellcode:
Dest.Clear;
die übergebene Liste zu löschen oder aber die Daten unten oder sonstwo anzuhängen. Miteiner Funktion bist Du nicht so flexibel.

Gruß
K-H

P.S.
Irgendwann vergisst jeder einmal die Liste wieder frei zu geben.

Dejan Vu 20. Aug 2014 15:33

AW: TStringList als Result einer Funktion
 
Es wurde auch schon 1000,3x gesagt: Funktionen sollten in Delphi eben keine Instanzen erzeugen und liefern, außer es ist auch vom Namen her klar, das da was erzeugt wird. Aber trotzdem würde ich das nie machen. Einfach weil.

mkinzler 20. Aug 2014 15:50

AW: TStringList als Result einer Funktion
 
Kompromiss:

Delphi-Quellcode:
function CreateList( list: TStrings): TStrings;
begin
if not Assigned( list) then
   list := TStringList.Create;
   list.Add( 'a');
   list.Add( 'b');
   list.Add( 'b');
   Result := list;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStrings;
begin
  try
    sl := CreateList( TStringList.Create);
    Memo1.Lines.Assign( sl);
  finally
    sl.Free;
  end;
end;

Dejan Vu 20. Aug 2014 15:56

AW: TStringList als Result einer Funktion
 
Na ja. Formal korrekt. Würdest Du das so schreiben und verwenden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:23 Uhr.
Seite 2 von 4     12 34      

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