Wie geht man mit Exceptions um?
Wenn man die
behandeln kann, dann und nur dann nimmt man einen
try except
. Ansonsten macht man sich das Verhalten einer
Exception zunutze (alle Anweisungen danach werden nicht mehr ausgeführt):
Delphi-Quellcode:
procedure TForm1.LoadFileButtonClick( Sender : TObject );
begin
if OpenDialog1.Execute then
begin
Memo1.LoadFromFile( OpenDialog1.Filename );
Edit1.Text := OpenDialog1.Filename;
end;
end;
Wenn jetzt
Memo1.LoadFromFile( OpenDialog1.Filename );
eine
Exception auslöst, dann wird
Edit1
nicht verändert und es erscheint der Dialog mit der Fehlermeldung.
Ist es das Verhalten, was gesucht wird?
Und komisch, das bekommt man ohne diese seltsame Schnickschnack Programmierung. Und irgendwie ist es auch noch einfacher.
Das Herumfuhrwerken an Exceptions und das Erstellen von Wrapper-Methoden, die im Fall der Fälle dann statt einer
Exception einen bestimmten Rückgabewert liefern, führt meistens nur zu wesentlich mehr und unlesbarem Code und in 99% aller Fälle dazu, dass Programmierfehler unentdeckt bleiben.
Exceptions sind nicht der Feind, aber das Abfangen
ohne wirkliche Behandlung ist der erste Schritt um die Anwendung zu meinem Feind zu machen.
Ja ich höre schon wieder die Stimmen "aaaaaber, ...". Natürlich kann man Exceptions abfangen, aber eben nur wenn man diese auch behandeln kann. Ohne sinnvolle Behandlung ist nur noch ein erneutes Werfen sinnvoll, wobei hier auch eine Übersetzung bzw. Umleitung auf eine eigene Exceptionklasse erfolgen kann.
Delphi-Quellcode:
MyConnection.StartTransaction;
try
MyQueryA.ExecSQL;
MyQueryB.ExecSQL;
MyConnection.Commit;
except
MyConnection.Rollback;
raise;
end;