Null-Test versus Versuch zu fangen

8

Hat jemand Metriken zur Durchführung von Nulltests im Vergleich zu Wrapping-Code in einem Versuch fangen?

Ich vermute, dass der Null-Test viel effizienter ist, aber ich habe keine empirischen Daten.

Die Umgebung ist C # / .net 3.x und der Codevergleich ist:

%Vor%

versus

%Vor%

Gibt es irgendwelche Vorteile beim Einpacken in try catch?

    
mson 09.12.2009, 14:58
quelle

11 Antworten

22

Wenn null ein möglicher erwarteter Wert ist, dann teste auf Null. Wenn Sie den Null-Test nicht mögen und einen Standardwert haben, können Sie den null coelescing-Operator verwenden, um den Standardwert festzulegen:

%Vor%

Speichern Sie try / catch für Ausnahmen (wirklich unerwartete Ereignisse).

    
Justin Niessner 09.12.2009, 14:59
quelle
8

Wenn kompakter Code das ist, nach dem Sie wirklich suchen, können Sie:

%Vor%

Der Operator ?? gibt den ersten Nicht-Null-Wert zweier Werte zurück, wenn einer vorhanden ist.

Danke

    
quelle
4

Ich würde denken, dass dies der schnellste Weg wäre:

%Vor%

Die ?? Operator ist eine Verknüpfung für die Null-Überprüfung, wenn Sie einen bestimmten Wert zuweisen möchten, wenn dieser null ist.

Wie auch immer, Ausnahmen erzeugen nicht nur ein neues Objekt, sondern erzeugen auch einen Stack-Trace, der die Dinge verlangsamt.

    
Powerlord 09.12.2009 15:03
quelle
1

Ausnahmen benötigen zusätzliche Speicher sowie Zeit, um zu fangen. Es ist IMMER besser, auf Null zu prüfen, wenn es ein möglicher Wert ist.

    
Nathan Wheeler 09.12.2009 15:01
quelle
1

Eine andere Sache, die es zu berücksichtigen gilt: Es ist einfach weniger Code und besser lesbar, um den Null-Test durchzuführen. Normalerweise hat try / catch-Blöcke im Normalfall keinen Overhead für den Code, aber wenn die Ausnahme ausgelöst wird, ist es ziemlich teuer.

    
Francis Upton 09.12.2009 15:02
quelle
0

Ich stimme @Justin Niessner zu. Außerdem sollten Sie diesen Artikel lesen, der einige interessante Punkte aufzeigt.

    
Klaus Byskov Pedersen 09.12.2009 15:02
quelle
0

Sie sollten niemals einen try / catch im normalen Codepfad Ihres Programms verwenden. Wenn Sie dies tun, erstellen Sie einen konstanten Müll, den der Müllsammler verarbeiten muss. Viel besser, einfach auf Null zu testen.

    
Benj 09.12.2009 15:03
quelle
0

Ausnahme sollte in diesem Fall gut funktionieren, aber ich glaube Nummer 1 ist der beste Weg zu gehen. Eine Ausnahme sollte nicht als If / else-Anweisung verwendet werden. Eine Ausnahme löst einen Fehler aus, der mehr Systemressourcen beansprucht als der erste Vergleich.

    
Pieter888 09.12.2009 15:04
quelle
0

NIEMALS Ausnahmen für den Programmkontrollfluss verwenden. Das einzige Mal, an dem Sie eine Ausnahme erstellen möchten, ist, dass (Dude)Session["xxxx"]; null ist, um die Funktion der Methode, in der Sie sich befanden, zu stoppen. Wenn also ein Nullwert vorhanden wäre, würde diese Methode die gewünschte Funktion nicht ausführen ausführen. Wenn Sie die Frage geschrieben haben, ob Sie in diesem Fall nur noch einen neuen Dude () erstellen müssen, ist dies nicht der Fall, also ist eine Ausnahme nicht gerechtfertigt.

    
Charles Bretana 09.12.2009 15:17
quelle
0

Verwenden Sie Ausnahmen für Ausnahmefälle - nicht normalen Programmablauf.

Wenn Sie viele Null-Tests durchführen müssen, sollten Sie das Null-Objekt-Muster verwenden, anstatt es zu verwenden echte Nullen, die auf einen nicht vorhandenen Wert hinweisen, der möglicherweise ein Standardverhalten aufweist.

Ich war immer etwas misstrauisch gegenüber dem Null-Objekt-Muster, bis ich anfing, Objective-C zu verwenden, wo es das eingebaute Verhalten ist. Es macht wirklich eine Menge Code sauber (aber es ist natürlich immer noch nicht immer passend).

    
philsquared 09.12.2009 15:17
quelle
0

Da Sie nur nach Null suchen wollen, sollten Sie das tun. Es ist effizienter als eine Ausnahme zu fangen.

Auch beim Abfangen von Ausnahmen sollten Sie sehr genau sein und nur genau das erreichen, was Sie erwarten. Wenn Sie irgendeine Art von Ausnahme abfangen, riskieren Sie Fehler, die Sie nicht erwartet haben, und behandeln sie falsch.

    
Guffa 09.12.2009 15:18
quelle

Tags und Links