![]() |
AW: Best Practice: Wann verwendet ihr Exceptions in Funktionen?
Zitat:
Das hat an der Stelle auch nichts mit Programmsteuerung zu tun. Dafür sind sie, zumindest in den allermeisten Fällen in der Tat ungeeignet. |
AW: Best Practice: Wann verwendet ihr Exceptions in Funktionen?
Was man auch nicht vergessen darf:
Exception im Programmablauf machen das Debuggen nicht grade leichter, also bezüglich "damit den Programmfluß zu steuern".
Delphi-Quellcode:
Jetzt debuggt mal einen Code, wo sowas alle 2 Sekunden durchlaufen wird und öfters keine Zahl im S drin steckt.
try
i := StrToInt(S); except i := 0; end; |
AW: Best Practice: Wann verwendet ihr Exceptions in Funktionen?
Mit Exceptions wird zudem der Code in der Regel kompakter und übersichtlicher.
Beispiel ohne Exceptions:
Delphi-Quellcode:
Jetzt mal mit Exceptions
procedure foo;
var LHandle1, LHandle2, LHandle3, LHandle4 : THandle; begin LHandle1 := GetHandleFromElsewhere; if LHandle1 <> INVALID_HANDLE then begin LHandle2 := GetHandleFromElsewhere( LHandle1 ); if LHandle2 <> INVALID_HANDLE then begin LHandle3 := GetHandleFromElsewhere( LHandle2 ); if LHandle3 <> INVALID_HANDLE then begin LHandle4 := GetHandleFromElsewhere( LHandle3 ); if LHandle4 <> INVALID_HANDLE then begin DoSomethingWithHandles( LHandle1, LHandle2, LHandle3, LHandle4 ); end; end; end; end; end;
Delphi-Quellcode:
type
EInvalidHandleException = class( Exception ); procedure CheckInvalidHandle( AHandle : THandle; const AText : string ); begin if AHandle = INVALID_HANDLE then raise EInvalidHandleException.Create( AText ); end; procedure foo; var LHandle1, LHandle2, LHandle3, LHandle4 : THandle; begin LHandle1 := GetHandleFromElseWhere; CheckInvalidHandle( LHandle1, 'from ElseWhere' ); LHandle2 := GetHandleFromElseWhere( LHandle1 ); CheckInvalidHandle( LHandle2, 'from ElseWhere' ); LHandle3 := GetHandleFromElseWhere( LHandle2 ); CheckInvalidHandle( LHandle3, 'from ElseWhere' ); LHandle4 := GetHandleFromElseWhere( LHandle3 ); CheckInvalidHandle( LHandle4, 'from ElseWhere' ); DoSomethingWithHandles( LHandle1, LHandle2, LHandle3, LHandle4 ); end; |
AW: Best Practice: Wann verwendet ihr Exceptions in Funktionen?
Zitat:
Wobei du aber auch die Funktionsweise von foo geändert hast. Beim ersten foo, mit den IFs, bekommt keiner mit, ob DoSomethingWithHandles verarbeitet wurde. |
AW: Best Practice: Wann verwendet ihr Exceptions in Funktionen?
Zitat:
Wobei ich im "Vier Handles"-Beispiel jetzt grübele, warum man nicht einfach die Funktion um einen "Erfolgreich?"-Rückgabe-Boolean erweitert und statt einer Exception einfach mit
Delphi-Quellcode:
rausspringt. Finde ich ok und tue es oft ohne mich zu schämen.
Exit(False)
|
AW: Best Practice: Wann verwendet ihr Exceptions in Funktionen?
Zitat:
|
AW: Best Practice: Wann verwendet ihr Exceptions in Funktionen?
Zitat:
weil das Object XmlDoc nicht bekannt ist. Es ständig neu zu erzeugen und zu verwerfen macht auch keinen Sinn. Dieser sinnlose VERBESSERUNGSTRIEB mancher "Zeitvertreiber" ist auch der Grund, warum ich hier meine Projekte nicht veröffentliche! |
AW: Best Practice: Wann verwendet ihr Exceptions in Funktionen?
Der Beitrag doch sogar eigentlich vollkommen zu deinen Gunsten? Hier muss doch niemand etwas beweisen und außerdem haben wir uns alle gern :party:
|
AW: Best Practice: Wann verwendet ihr Exceptions in Funktionen?
Zitat:
Code:
Persönlich bin ich nicht von der Notwendigkeit von Exceptions überzeugt. Vor allem finde ich, dass die Exceptionbehandlung in den meisten Sprachen (auch in Delphi) nicht wirklich schön lesbarer Code ist.
procedure foo;
var LHandle1, LHandle2, LHandle3, LHandle4 : THandle; begin LHandle1 := GetHandleFromElsewhere; if LHandle1 = INVALID_HANDLE then return; LHandle2 := GetHandleFromElsewhere(LHandle1); if LHandle2 = INVALID_HANDLE then return; ... end; |
AW: Best Practice: Wann verwendet ihr Exceptions in Funktionen?
Zitat:
Für den Fall, dass eine Methode einen Fehlerfall nicht korrekt behandeln kann, sind Exceptions ein valider, sauberer und sinnvoller Weg. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 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