Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Hilfestellung Speichern/Laden von Werten in anderen Datein (https://www.delphipraxis.net/164482-hilfestellung-speichern-laden-von-werten-anderen-datein.html)

Sir Rufo 15. Nov 2011 13:50

AW: Hilfestellung Speichern/Laden von Werten in anderen Datein
 
Zitat:

Zitat von bernerbaer (Beitrag 1136298)
Zitat:

Zitat von DeddyH (Beitrag 1136235)
Sollte die Liste nicht besser vor dem Try erzeugt werden?

Warum? Weil es in den meisten Lehrbüchern zu Delphi so vermittelt wird? Was kann passieren, wenn das Create fehlschlägt? -> Nichts.

Nein, es geht um das generelle Code-Design, und das ich mich als Programmierer auf gewisse Sachen verlassen kann.

In diesem Konstrukt wird der gesamte
Delphi-Quellcode:
try .. finally .. end
Block nur dann ausgeführt, wenn
Delphi-Quellcode:
TMyFoo.Create
keine Exception wirft.
Delphi-Quellcode:
MyFoo := TMyFoo.Create;
try
  // irgendwas mit MyFoo machen
finally
  MyFoo.Free;
end;
Hier sieht das aber ganz anders aus. Wenn
Delphi-Quellcode:
TMyFoo.Create
eine Exception wirft, dann wird der
Delphi-Quellcode:
finally
Teil ausgeführt.
Delphi-Quellcode:
try
  MyFoo := TMyFoo.Create;
  // irgendwas mit MyFoo machen
finally
  MyFoo.Free;
end;
Wir haben also 2 völlig unterschiedliche Verhaltensweisen. In dem gezeigten Beispiel mag das zwar völlig wumpe sein, aber man sollte sich dessen bewusst sein.

Zitat:

Zitat von bernerbaer (Beitrag 1136298)
Klar ist Bummis Code verbesserbar, da SL irgendwelchen Müll enthalten könnte. Ein sl:= nil vor dem sl create wäre meiner Meinung nach besser.

Was interessiert einen der Wert einer lokalen Variable, vor der Initialisierung? Oder deklarierst du das immer so:
Delphi-Quellcode:
procedure Foo;
var
  lFoo : Integer;
begin
  lFoo := 0; // es könnte ja was ganz doofes da in lFoo stehen, also nur so zur Sicherheit
  lFoo := 100;
  ...
end;
Denn das ist genau das was du vorschlägst:
Delphi-Quellcode:
procedure Foo;
var
  lFoo : TFoo;
begin
  lFoo := nil; // es könnte ja was ganz doofes da in lFoo stehen, also nur so zur Sicherheit
  lFoo := TFoo.Create;
  ...
end;

bernerbaer 15. Nov 2011 14:01

AW: Hilfestellung Speichern/Laden von Werten in anderen Datein
 
Ja, ich hab mich nur kurz ausgedrückt. Eigentlich bin ich vollkommen deiner Meinung, ohne sl:= nil könnte free Daten zerstören. Free prüft soweit ich richtig bin, immer ob überhaupt eine Instanz des Objektes besteht, deshalb das sl:= nil vor dem create.

Ich selbst gehe fast immer so vor
Delphi-Quellcode:
foo := nil;
try
   foo := TFoo.create;
   //mach was
finally
  foo.free;
end;
warum? In der Regel ist es so, dass mehrere Objekte erzeugt werden müssen, eine komplexe Verschachtelung von Try und Finally für jedes einzelne Objekt macht den Code dann extrem unübersichtlich. Deshalb erzeuge ich Objekte meist innerhalb des Try Blockes.

Bsp.:

Delphi-Quellcode:
foo := nil;
bar:= nil;
try
   foo := TFoo.create;
   bar:=TBar.create;
   //mach was mit Foo und Bar
finally
  bar.free
  foo.free;
end;

Rarator 16. Nov 2011 17:01

AW: Hilfestellung Speichern/Laden von Werten in anderen Datein
 
@ alle

Vielen Dank für eure reiche Hilfe, meine Fragen bzgl Thema sind beantwortet und thread kann geclosed werden :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:59 Uhr.
Seite 2 von 2     12   

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