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

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

私はこの構造をたくさん使い、functionBがどこにあるのかを常にコード化する必要があります。それはちょっとちょっとちがうようです。これを行うより良い方法はありますか?コードのこの塊に、よりエレガントなソリューションがありますか?

+2

これは[codereview.SE]に適している可能性があります。 –

+0

あなたはどの言語を使用していますか? – sll

+0

@sll It's VB .NET 4.0 – hanesjw

答えて

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

あなたはそのような意味ですか?

+1

これはa == nullの場合、例外をスローします。 a.idはインスタンス化されません。 try/catchブロックを使用して、elseの代わりにインスタンス化することもできますが、それは同じくお粗末です。 .NET 4.0ではif文に新しいキーワードが追加されました(私も「やはり」と思います)。最初のチェックが成功した場合にのみ続行されます。使用している言語によって異なります。 – Corey

+1

@Coreyそれはしません。 'a == null'の場合、' && 'の後のコードは評価されません。 – trutheality

+0

@trutheality少なくとも初期の言語では:) – jpm

5

これは少し簡単です:

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

私の答えのフリップ。個人的な味は、どちらがより明確です。 +1すべて同じ。 – jpm

0

ここでは、& &オペレータとして第一expが唯一の次のexpはIF()文の

で評価される、その後真として評価されるの利点を取っています
 if(a != null && a.id==b.id) { 
     functionA(); 
     } 
     else { 
     functionB(); 
     } 
関連する問題