Delphi-PRAXiS
Seite 2 von 7     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   "FinalllyExit" gewünscht (https://www.delphipraxis.net/160164-finalllyexit-gewuenscht.html)

jfheins 30. Apr 2011 12:03

AW: "FinalllyExit" gewünscht
 
Zitat:

Zitat von stahli (Beitrag 1097832)
Nur, wenn es irgendwo knallt, ist es m.E. zweitrangig, ein erzeugtes Objekt auch wieder frei zu geben.

[...]

... bringt einen die Objektfreigabe auch nicht wirklich weiter. Das Projekt arbeitet fehlerhaft bzw. nicht zuverlässig. Der Fehler muss UNBEDINGT bereinigt werden, aber die Freigabe des Objektes finde ich im Fehlerfall mindestens nachranging.
Ob das Objekt nun aufgelöst wird oder nicht - das Programm beinhaltet fehlerhafte Daten.

Naja, so kann man das nicht sagen. Nimm an, es geht um einen Filestream und du möchtest Daten speichern. Ohne Exceptionhandling. Es tritt ein Fehler auf, der an den benutzer weitergegeben wird - z.B. weil in den Daten ein Fehler drin ist. Er korrigiert den Fehler, will wieder speichern und es geht wieder nicht, weil die Datei noch vom letzten Mal geöffnet ist - der Filestream wurde ja nicht freigegeben!

Ein Speicherleck ist zwar nicht schön aber RAM ist meistens genug da. Wenn andere Ressourcen nicht freigegeben werden, kann es schon ärgerlicher werden. Und genau dafür hat man ja try-finally ;)

Aphton 30. Apr 2011 12:07

AW: "FinalllyExit" gewünscht
 
Zitat:

Zitat von stahli (Beitrag 1097836)
Ok, das (finally und DANN exit) hört sich sehr gut an. Ich schaue mir das wie gesagt noch genau an.

Ähm, dann werden die folgenden Befehle nicht mehr ausgeführt, da der finally Block unbedingt ausgeführt wird und ein Exit dort veranlasst das Verlassen der Funktion. Dh. es kommt nie zu einem:
DoNotIfExitBefore

Stevie 30. Apr 2011 12:12

AW: "FinalllyExit" gewünscht
 
Mag nur meine Meinung, aber für jedes Exit sollte es einen Schlag in den Nacken geben.
Klar, an manchen Stellen kann man sich in etwas vertrackten Konstrukten einfach aus der Affaire ziehen, aber sauber gecoded ist es zu 99.99% vermeidbar.

omata 30. Apr 2011 12:16

AW: "FinalllyExit" gewünscht
 
@Stevie: Danke, genau diese Worte habe ich mir beim Lesen dieses Themas gewünscht :thumb:

Aphton 30. Apr 2011 12:49

AW: "FinalllyExit" gewünscht
 
Zitat:

Zitat von Stevie (Beitrag 1097847)
Mag nur meine Meinung, aber für jedes Exit sollte es einen Schlag in den Nacken geben.
Klar, an manchen Stellen kann man sich in etwas vertrackten Konstrukten einfach aus der Affaire ziehen, aber sauber gecoded ist es zu 99.99% vermeidbar.

Ähm, ja, ich hab das auch die meiste Zeit gedacht, aber um den Code kürzer zu halten, ist es wirklich sinnvoll, hier und da mal Exit zu verwenden.
Ein Beispiel:

Delphi-Quellcode:
// mit Exit
begin
  if not FileExists(Filename) then Exit;
  LoadFile();
  ProcessFile();
  DoSomethingElseWithFile();
end;

// ohne Exit
begin
  if FileExists(Filename) then
  begin // extra Zeile
// + Verschachtelung
    LoadFile();
    ProcessFile();
    DoSomethingElseWithFile();  
  end; // extra Zeile

stahli 30. Apr 2011 12:55

AW: "FinalllyExit" gewünscht
 
Zitat:

Zitat von Aphton (Beitrag 1097855)
Zitat:

Zitat von Stevie (Beitrag 1097847)
Mag nur meine Meinung, aber für jedes Exit sollte es einen Schlag in den Nacken geben.
Klar, an manchen Stellen kann man sich in etwas vertrackten Konstrukten einfach aus der Affaire ziehen, aber sauber gecoded ist es zu 99.99% vermeidbar.

Ähm, ja, ich hab das auch die meiste Zeit gedacht, aber um den Code kürzer zu halten, ist es wirklich sinnvoll, hier und da mal Exit zu verwenden.
Ein Beispiel:

Delphi-Quellcode:
// mit Exit
begin
  if not FileExists(Filename) then Exit;
  LoadFile();
  ProcessFile();
  DoSomethingElseWithFile();
end;

// ohne Exit
begin
  if FileExists(Filename) then
  begin // extra Zeile
// + Verschachtelung
    LoadFile();
    ProcessFile();
    DoSomethingElseWithFile();  
  end; // extra Zeile

Sehe ich auch so. Der Code wird u.U. einfach kürzer und übersichtlicher.
Zumal man mit Exit(Value) in Funktionen auch gleich einen Result-Wert zuweisen kann.

Zacherl 30. Apr 2011 13:00

AW: "FinalllyExit" gewünscht
 
Grade wenn man viele APIs hintereinander aufruft und immer wieder die Rückgabe prüft, dann hat man ohne Exit spätestens nach der 4.-5. Verschachteltung viel Spaß den Code sauber einzurücken :D

Aphton 30. Apr 2011 13:00

AW: "FinalllyExit" gewünscht
 
Ist die überladene Funktion Exit mit Value neu?
Weil hier bei mir gibts die nicht, ich hab nur ein Exit()!

Stevie 30. Apr 2011 13:01

AW: "FinalllyExit" gewünscht
 
Zitat:

Zitat von Aphton (Beitrag 1097855)
Zitat:

Zitat von Stevie (Beitrag 1097847)
Mag nur meine Meinung, aber für jedes Exit sollte es einen Schlag in den Nacken geben.
Klar, an manchen Stellen kann man sich in etwas vertrackten Konstrukten einfach aus der Affaire ziehen, aber sauber gecoded ist es zu 99.99% vermeidbar.

Ähm, ja, ich hab das auch die meiste Zeit gedacht, aber um den Code kürzer zu halten, ist es wirklich sinnvoll, hier und da mal Exit zu verwenden.
Ein Beispiel:

Delphi-Quellcode:
// mit Exit
begin
  if not FileExists(Filename) then Exit;
  LoadFile();
  ProcessFile();
  DoSomethingElseWithFile();
end;

// ohne Exit
begin
  if FileExists(Filename) then
  begin // extra Zeile
// + Verschachtelung
    LoadFile();
    ProcessFile();
    DoSomethingElseWithFile();  
  end; // extra Zeile

ROFL, hast du mal bei uns gearbeitet? Jedesmal, wenn ich solchen Code in alten Units sehe, ändere ich das sofort. :wall:
Ernsthaft - um 2 Codezeilen zu sparen? Worin leidet denn beim 2. die Lesbarkeit?
Stell dir vor, man baut mal sowas wie Logging ein:

Delphi-Quellcode:
begin
  Logger.EnterMethod('LoadFile');
  if not FileExists(Filename) then Exit;
  LoadFile();
  ProcessFile();
  DoSomethingElseWithFile();
  Logger.LeaveMethod('LoadFile');
end;

begin
  Logger.EnterMethod('LoadFile');
  if FileExists(Filename) then
  begin
    LoadFile();
    ProcessFile();
    DoSomethingElseWithFile();  
  end;
  Logger.LeaveMethod('LoadFile');
end;
Ah, dann kommt bestimmt die Frage, wie man mit trotz Exit noch bestimmten Code ausführen kann... Merkste was?

Zitat:

Zitat von Aphton (Beitrag 1097859)
Ist die überladene Funktion Exit mit Value neu?
Weil hier bei mir gibts die nicht, ich hab nur ein Exit()!

Ja, keine Ahnung, welche Delphi Version, irgendwas zwischen 7 und 2009

Zitat:

Zitat von stahli (Beitrag 1097857)
Sehe ich auch so. Der Code wird u.U. einfach kürzer und übersichtlicher.
Zumal man mit Exit(Value) in Funktionen auch gleich einen Result-Wert zuweisen kann.

Schonmal Fremdcode debuggt, wo irgendwo nen Exit drin ist und man sich wundert, warum bestimmte Sachen nicht mehr ausgeführt werden?

omata 30. Apr 2011 13:02

AW: "FinalllyExit" gewünscht
 
Zitat:

Zitat von Aphton (Beitrag 1097855)
Ein Beispiel:

Ich persönlich halte von so einer "negativen" Programmierung gar nichts. Mir geht es auch nicht um eine Zeile mehr oder weniger. Es ist jetzt auch nicht nötig, hier irgendwelche Beispiele anzuführen, um die jeweils andere Seite zu überzeugen. Exit ist nunmal nicht nötig, das heißt nicht, dass man es nicht verwenden kann. Nur ist es eben nicht nötig. Trotzdem könnt ihr das natürlich gerne verwenden, lasst ihr uns dann auch die Freiheit, es nicht verwenden zu müssen?
Danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 Uhr.
Seite 2 von 7     12 34     Letzte »    

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