![]() |
Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin
Ich hätte mein "Warum" klarer formulieren sollen. Aber Luckie hats ja schon beantwortet.
|
Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin
Zitat:
Delphi-Quellcode:
bzw bei vielen Properties:
function meineFkt(str: String): TMeinTyp;
begin Result := TMeinTyp.Create; Result.Property1 := 'Hallo 1'; Result.Property2 := 'Hallo 2'; end;
Delphi-Quellcode:
function meineFkt(str: String): TMeinTyp;
begin Result := TMeinTyp.Create; with Result do begin Property1 := 'Hallo 1'; Property2 := 'Hallo 2'; Property3 := 'Hallo 3'; Property4 := 'Hallo 4'; Property5 := 'Hallo 5'; Property6 := 'Hallo 6'; //... end; end; |
Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin
Zitat:
Delphi-Quellcode:
Rückgabe = TMeinTyp
function meineFkt(str: String): TMeinTyp;
begin Result := TMeinTyp.Create; try Result.Property1 := 'Hallo 1'; Result.Property2 := 'Hallo 2'; except FreeAndNil(Result); end; end; Rückgabe bei Fehler = nil [edit] Anwendung:
Delphi-Quellcode:
[/edit]
...
x.Free; // nur um zu zeigen das x nicht definiert sein sollte/muss x := meineFunktion(''); if x <> nil then try // mach was finally x.Free; end else Fehlermeldung.Ausgeben('...'); ... |
Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin
Man könnte es auch als out Parameter deklarieren, wenn einem eine Deklaration als var Paamaeter nicht gefällt:
Delphi-Quellcode:
procedure FillSl(out sl: TStringList);
begin sl.Add('Foo'); sl.Add('bar'); sl.Add('Hello'); sl.Add('world'); end; procedure TForm1.Button1Click(Sender: TObject); var sl: TStringList; begin sl := TStringList.Create; try FillSl(sl); Listbox1.Items.Assign(sl); finally FreeAndNil(sl); end; end; |
Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin
Zitat:
Delphi-Quellcode:
...
with meineFkt('') do try // mach was mit den Properties finally Free; end; ... |
Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin
Hallo!
Also nochmals vielen Dank dafür, dass Ihr euch alle so gut um mein Problem gekümmert habe. Wie man result verwendet, weiß ich ja inzwischen, und eine gute Auswahl für die Werte-Rückgabe habe ich auch. Also ich habe es inzwischen mit var-Parametern realisiert und es funktioniert. Ich bin zwar im allgemeinen nicht so begeistert von solch einer Methode, da ich eher aus der Websieprogrammierung (PHP) komme. Dort war ich es gewohnt grundsätzlich mit Rückgabewerten zu arbeiten. Das geht ja wegen der Konsequenten Typunterscheidung bei Delphi nicht so schön (wie z.B. im Fehlerfall boolean sonst integer, vielleicht aber auch real und oder array :? ...). Aber was ich ganz unschön finde ist dieses lästige erstellen und freigeben (MainTyp.Create..). Vielleicht muss ich einfach mal einen Abend darüber nachdenken. Damit ich nachvollziehe, warum das alles nötig ist. Was mich allerdings mal interessiert, ist, ob ihr eigentlich irgendwie kommerziell hier angestellt seid, oder ob ihr einfach nur hilfsbereit seid und wirklich bei Gelegenheit mal helfen wollt. Ich denke, dass ist eine Charaktereigenschaft, die in unserer Gesellschaft eigentlich zunehemend verloren geht. Wenn ich eines Tages gut genug sein werde, hier auch mal eine Frage zu beantworten, dann habe ich wenigstens nicht mehr das Gefühl hier im Forum herumzuschmarotzen :lol: Genug geredet. mfg changlee |
Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin
Ganz einfach. Instanzen von Klassen die du erzeugst belegen Speicher. Damit dieser Speicher wieder freigegeben wird, muss man die Instanzen wieder freigeben. Generell gilt: alles Ressourcen, die man selber belegt, muss man auch wieder freigeben. Das Gilt für Speicher, für Handles usw.
|
Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin
Wenn du ein Variable vom einer Klasse hast zum Beispiel TFileStream, dann besitzt du nur einen Zeiger (4 Bytes) auf das Objekt. Erst mit dem Create wird das eigentlich Objekt erstellt. Fürs Freigeben siehe Luckies Beitrag ;)
P.S: Wenn man bei PHP konsequent mit Objekten arbeitet, hast du das dort auch. |
Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin
Zitat:
Selbst die Moderatoren, die hier nach dem Rechten sehen, machen das unentgeltlich. Es macht einfach Spaß sein Wissen weiterzugeben. Im Gegenzug bekommt man ja auch bei seinen Problemen geholfen. Das ist ein Geben und Nehmen. Zitat:
Viel Spaß |
Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin
ot:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz