![]() |
AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
Zitat:
|
AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
Zitat:
Die im except-Fall aufgetretene Exception sollte in beiden Fällen nach oben durchgereicht werden. |
AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
Zitat:
Dann gäbe es aber immer noch eine unbehandelte Exception. Dinge, die man im Fehlerfalle macht, sollten keine Exception werfen, oder diese zumindest selbst ordentlich abfangen und verarbeiten. Ich habe nichts gegen ein solches Konstrukt, sehe aber auch nicht, wie es bei sicherer Programmierung notwendig wäre. |
AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
Zitat:
Zitat:
|
AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
Zitat:
- die abgefangene Exception auf eine eigene Exceptionsklasse ummappen - eine Notfallroutine starten, aber die Exception trotzdem laufen lassen - nur bestimmte Exceptions abfangen und alles andere weiterreichen |
AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
Zitat:
Delphi-Quellcode:
Das wünsche ich mir schon lange :)
with qry:=TUniQuery.Create(nil), frm:=TMyForm.Create(nil) do // oder frm = ...
try qry.Connection := Datenmodul.MeineDB; qry.SQL.Text := 'SELECT bla FROM blubb WHERE fasel'; [...] frm.Machwas; frm.ShowModal; except on E: Exception do Blablubb; finally frm.Free; end; In diesem speziellen Fall (und ner kurzen Procedure) kann man natürlich auch "frm" einfach oben definieren. Aber wenn die Procedure länger wird, geht der Zusammenhang schnell verloren. |
AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
Gerade dann wenn zwischen dem try und dem except bzw. dem finally viel Quelltext steht, wenn sich innerhalb dessen noch ein paar try-Blöcke aufhalten, dann wird es schon recht unübersichtlich. Und auf das Problem als solches aufmerksam wurde ich, weil ich genau den Fall hatte wie im Eingangspost beschrieben: Eine Transaction sollte ein Rollback im Except-Fall machen und ein Commit im Finally-Fall. Allerdings musste ich das durch einen boolschen "Nebenläufer" absichern.
Zitat:
Das möchte ich auch noch mal betonen: Mir geht es vorrangig um die Lesbarkeit, was nicht gleichbedeutend ist mit möglichst kompaktem Code. Dass try-except-finally zu weniger Codezeilen führt ist eher ein unbeabsichtigter Nebeneffekt. |
AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
Delphi-Quellcode:
...Satan weiche! :warn: Wie schon immer berichtet nimmst du mit with dir die Debugging Möglichkeiten...vom Scope-Fehler mal abgesehen. :roll:
with qry:=TUniQuery.Create(nil), frm:=TMyForm.Create(nil) do // oder frm = ...
|
AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
Zitat:
Es geht ganz ohne "Nebenläufer":
Delphi-Quellcode:
BeginTransaction;
try MachWasMitDerDatenbank; CommitTransaction; except RollbackTransaction; end; |
AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
Zumal mir an dem gegebenen Beispiel nicht so ganz klar wird, wofür das with hier überhaupt gebraucht wird, da beide Elemente (qry und frm) benannt sind und auch als benannte Elemente verwendet werden. Genau genommen hat man auf diese Weise eine Zeile gespart und zwei Keywords hinzugefügt. Aber wie gesagt, das ist ein Thema für sich.
Zitat:
Delphi-Quellcode:
qry:=TUniQuery.Create(nil); frm:=TMyForm.Create(nil); // oder frm = ...
try qry.Connection := Datenmodul.MeineDB; qry.SQL.Text := 'SELECT bla FROM blubb WHERE fasel'; [...] frm.Machwas; frm.ShowModal; except on E: Exception do Blablubb; finally frm.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 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 by Thomas Breitkreuz