![]() |
Re: try ... except --> wann verwenden ???
Ich vermisse unter Delphi einen Try-Except-Finally-End Block. Dann wären Speicherlecks recht komfortabel auszuschließen. C# hat sowas.
|
Re: try ... except --> wann verwenden ???
Ich finde, man sollte Try ... Except Blöcke dann verwenden, wenn im Normalfall nichts passiert, aber eine Ausnahme (nichts anderes bedeutet ja 'Exception') gesondert behandelt werden sollte.
Zitat:
Delphi-Quellcode:
Oder auch
If ActionA=aSuccess Then
If ActionB = Success Then If ActionC = Success Then If ActionD = Success Then ..... else .... else ...
Delphi-Quellcode:
vs.
aResult := ActionA;
If aResult<>Success Then Exit; aResult := ActionB; If aResult<>Success Then Exit; aResult := ActionC; If aResult<>Success Then Exit; aResult := ActionD; If aResult<>Success Then Exit;
Delphi-Quellcode:
Also, schreib mal übersichtlicheren und robusten Code ohne Try...Except.
Try
ActionA; ActionB; ActionC; ActionD; Except Raise Exception.Create('Bei der Abarbeitung der Aktionen ist ein Fehler aufgetreten'); End; Es ist natürlich beim Design und Debuggen etwas nervig, wenn einem Exceptions um die Ohren fliegen. Aber erstens kann man das ausschalten und zweitens ist es ja eine Ausnahme, die eben nur in Ausnahmefällen vorkommen sollte. Programmfehler würde ich mit Assert-Anweisungen vermeiden, Logische Prüfungen von Eingaben vermutlich über einen Parser / DEA analysieren und bei einem Fehler eine Exception 'EUserInputException' schmeissen, die die genaue Ursache und Position beinhaltet. Zum Beispiel vom Dezipaitor. Variante A (Wenn der Fehler weitergereicht werden soll);
Delphi-Quellcode:
Und wenn nicht:
MyOBject:= TMyObject.Create;
Try Try MyObject.CriticalMethod; Except On E:ESomeException Do Begin HandleSomeException (E); Raise End End Finally MyObject.Free; End;
Delphi-Quellcode:
Letzteres ist die sog. 'Halts Maul' Variante, die man durch einen überflüssigen Try..Finally Block kapseln kann:
MyObject:= TMyObject.Create;
Try MyObject.CriticalMethod; Except On E:ESomeException Do HandleSomeException (E); End; MyObject.Free;
Delphi-Quellcode:
MyObject:= TMyObject.Create;
Try Try MyObject.CriticalMethod; Except On E:ESomeException Do HandleSomeException (E); End; Finally MyObject.Free; End; |
Re: try ... except --> wann verwenden ???
Beim Befüllen einer Caption halte ich es nicht sinnvoll (was soll dabei schief gehen und was soll ich anschließend mit der abgefangenen Exception machen)
Ich setze es immer nur dann ein, wenn ich nach einer schiefgelaufenen Aktion etwas unternehmen muss. Z.B. ein Rollback
Delphi-Quellcode:
StartTransaction
try ... except RollBack; raise; end; Commit; |
Re: try ... except --> wann verwenden ???
[Klugscheiss]Da jedoch das Commit konzeptionell zur Aktion gehört, sollte man es auch in den Block packen [/Klugscheiss]
Delphi-Quellcode:
Es tut aber eigentlich Nichts zur Sache.
StartTransaction
try ... Commit; except RollBack; raise; end; |
Re: try ... except --> wann verwenden ???
Zitat:
Delphi-Quellcode:
try
... try ... except ... end; finally ... end; |
Re: try ... except --> wann verwenden ???
Zitat:
Zitat:
Bei komplexeren Strukturen, wie du sie ansprichst, ist das natürlich nicht sonderlich sinnvoll, auf try-except zu verzichten. |
Re: try ... except --> wann verwenden ???
Zitat:
|
Re: try ... except --> wann verwenden ???
Moin squetk,
Zitat:
|
Re: try ... except --> wann verwenden ???
Weiterhin muss - bei korrekter ACID-Implementierung - das Rollback auch ein fehlerhaftes Commit rückgängig machen können.
Zitat:
|
Re: try ... except --> wann verwenden ???
Das fänd ich jetzt mal interessant.
Was kann dazu führen, dass ein Commit fehlschlägt - was ein Rollback reparieren könnte? Und was ist ACID? Ich kenn nur die Musikrichtung :dancer2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:47 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