Ist es besser, eine Guard-Klausel zu verwenden oder die Ausnahme abzufangen? [geschlossen]

7

ist es besser, eine Ausnahme mit einer Wächterklausel zu verhindern oder die Ausnahme zu fangen? Es gibt eine Best Practice? Vor- und Nachteile der beiden Methoden?

Zum Beispiel ist das besser:

%Vor%

oder das:

%Vor%

Vielen Dank für die Antworten:)

    
Fabio Marcolini 10.05.2013, 14:31
quelle

4 Antworten

17
  

ist es besser, eine Ausnahme mit einer Wächterklausel zu verhindern oder die Ausnahme zu fangen?

Im Falle von "bone headed" -Ausnahmen wie Index außerhalb des Bereichs, immer der erste.

Bei "exogenen" Ausnahmen immer die letzteren.

  

Vor- und Nachteile der beiden Methoden?

Im Falle von boneheaded Ausnahmen gibt es nur Nachteile von letzterem. Sie sind:

  • Ausnahmen sind unglaublich teuer im Vergleich zu Tests.
  • Ausnahmen sollen außergewöhnlich seltene Kontrollfluss-Situationen modellieren; Wenn Sie möglicherweise auf einen Index außerhalb des Bereichs zugreifen, der normal ist, schreiben Sie keinen Ausnahme Handler.
  • Ausnahmen werden als "erste Chance" für Listener gemeldet, selbst wenn die Ausnahme behandelt wird . Viele Systeme - zum Beispiel ASP - warten auf Ausnahmen der ersten Chance, protokollieren sie alle und behandeln Komponenten, die viele von ihnen als buggy produzieren, weil sie sind . (Ich habe einmal eine absichtliche Ausnahme der ersten Chance in einem gemeinsamen Code-Pfad in ASP eingeführt und einen Tag später habe ich davon gehört. Die Buggy-Subsystem-Tests sind verrückt geworden.)
  • Es gibt einige Ausnahmen, die ich die "boneheaded" -Ausnahmen - Nulldereferenzierung, Index außerhalb des Bereichs usw. - nennen, weil sie so einfach zu vermeiden sind und Fehler anzeigen, die so offensichtlich gefährlich sind, dass sie sollten immer werden als fatale Fehler behandelt und nie behandelt (außer der "Handler" protokolliert sie, bevor er den Prozess beendet.) Behandeln Sie den Fehler nicht, beseitigen Sie den Fehler .

Schließlich sollten Sie meinen Artikel zu diesem Thema lesen.

Ссылка

    
Eric Lippert 10.05.2013, 14:49
quelle
17

Verwenden Sie eine Guard-Klausel - das Einfangen der Ausnahme verursacht hohe Laufzeitkosten, und im Allgemeinen sollten Sie zur Verbesserung der Lesbarkeit Ausnahmen für Fehlerbedingungen verwenden, nicht für den normalen Kontrollfluss

    
Zim-Zam O'Pootertoot 10.05.2013 14:32
quelle
4

Schutzklausel Sie möchten nie try / catch für den Kontrollfluss verwenden. Abfangen von Ausnahmen ist teuer und sollte so viel wie möglich vermieden werden.

    
Dave Zych 10.05.2013 14:33
quelle
3

In Fällen, in denen die Ausnahme verhindert werden kann, verhindern Sie dies. Immer.

Das Abfangen und Behandeln von Ausnahmen ist teuer und sollte niemals für den normalen Kontrollfluss verwendet werden. Ein Wächter ist billig und einfach.

    
Justin Niessner 10.05.2013 14:32
quelle

Tags und Links