2012-04-11 10 views
2
var b = someObjectThatWillNotBeNull; 
var a = getA(); 

if(a != null) { 
    if(a.id == b.id) { 
     functionA(); 
    } else { 
     functionB(); 
    } 
} else { 
    functionB(); 
} 

Ich laufe in diese Struktur viel und muss immer den Code kopieren, wo FunktionB ist. Es scheint nur ein wenig schlampig. Gibt es einen besseren Weg, dies zu tun?Gibt es eine elegantere Lösung für dieses Stück Code?

+2

Dies könnte besser für [codereview.SE] geeignet sein. –

+0

In welcher Sprache benutzen Sie? – sll

+0

@sll Es ist VB .NET 4.0 – hanesjw

Antwort

11
if (a != null && a.id == b.id) { 
    functionA(); 
} else { 
    functionB(); 
} 

Sie meinen sowas?

+1

Dies würde eine Ausnahme auslösen, wenn ein == null. a.id würde nicht instanziiert werden. Sie können einen try/catch-Block verwenden und statt dessen Instanziieren, aber das ist ebenso schlampig. .NET 4.0 hat ein neues Schlüsselwort in if-Anweisungen hinzugefügt (ich denke "auch"?), Das nur fortgesetzt wird, wenn die erste Überprüfung erfolgreich ist. Hängt von der Sprache ab, die Sie verwenden. – Corey

+1

@Corey wird es nicht. Wenn 'a == null ', wird der Code nach dem' && 'nicht ausgewertet. – trutheality

+0

@trutheality Zumindest in jeder vernünftigen Sprache :) – jpm

5

Das ist ein bisschen einfacher:

if (a == null || a.id != b.id) 
    functionB(); 
else 
    functionA(); 
+0

Nur der Spiegel meiner Antwort. Persönlicher Geschmack, um das ist klarer. +1 alle gleich. – jpm

0

wir hier den Vorteil, & & Operator als erster exp ausgewertet werden einnehmen als wahr dann nur die nächste exp ausgewertet wird, wenn() Anweisung

 if(a != null && a.id==b.id) { 
     functionA(); 
     } 
     else { 
     functionB(); 
     } 
Verwandte Themen