AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Rückgabewert von Funktionen / evtl. Problem mit try..finally
Thema durchsuchen
Ansicht
Themen-Optionen

Rückgabewert von Funktionen / evtl. Problem mit try..finally

Ein Thema von changlee · begonnen am 2. Dez 2004 · letzter Beitrag vom 6. Dez 2004
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin

  Alt 2. Dez 2004, 15:30
Ich hätte mein "Warum" klarer formulieren sollen. Aber Luckie hats ja schon beantwortet.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin

  Alt 2. Dez 2004, 15:34
Zitat von changlee:
Ich werde es jetzt wohl mit var-Parametern lösen.
Ich würde es so machen:
Delphi-Quellcode:
function meineFkt(str: String): TMeinTyp;
begin
  Result := TMeinTyp.Create;
  Result.Property1 := 'Hallo 1';
  Result.Property2 := 'Hallo 2';
end;
bzw bei vielen Properties:
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;
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin

  Alt 2. Dez 2004, 15:36
Zitat von MaBuSE:
Ich würde es so machen:
Delphi-Quellcode:
function meineFkt(str: String): TMeinTyp;
begin
  Result := TMeinTyp.Create;
  Result.Property1 := 'Hallo 1';
  Result.Property2 := 'Hallo 2';
end;
bzw etwas sicherer:

Delphi-Quellcode:
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 = TMeinTyp
Rückgabe bei Fehler = nil

[edit]
Anwendung:
Delphi-Quellcode:
  ...
  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('...');
  ...
[/edit]
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin

  Alt 2. Dez 2004, 15:38
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;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#15

Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin

  Alt 2. Dez 2004, 15:49
Zitat von Luckie:
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;
Dann kanst Du aber nicht so was machen wie:

Delphi-Quellcode:
  ...
  with meineFkt('') do
  try
    // mach was mit den Properties
  finally
    Free;
  end;
  ...
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
changlee
(Gast)

n/a Beiträge
 
#16

Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin

  Alt 3. Dez 2004, 21:41
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

Genug geredet.

mfg
changlee
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#17

Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin

  Alt 3. Dez 2004, 22:04
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#18

Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin

  Alt 4. Dez 2004, 11:02
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.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#19

Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin

  Alt 6. Dez 2004, 10:29
Zitat von changlee:
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.
Hier ist keiner kommerziell angestellt !!!
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 von changlee:
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
Schau mal genauer hin. Es gibt sicherlich auch schon einige Fragen zu denen Du eine Lösung (oder einen Lösungsansatz) hast. Keine Scheu, einfach mal antworten.

Viel Spaß
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#20

Re: Rückgabewert von Funktionen / evtl. Problem mit try..fin

  Alt 6. Dez 2004, 10:32
ot:
Zitat von MaBuSE:
Es macht einfach Spaß sein Wissen weiterzugeben.
Oder so zu tun, als hätte man welches.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 08:01 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