2016-03-23 15 views
4

は、私は、次のコードを持っている:これらの2つのif文をマージできますか?

if (a || b) 
{ 
    X(); 
} 

if (a) 
{ 
    Y(); 
} 

私は何とかこの二つのif文をマージすることはできますか?

+3

念頭に置いてクマを行い値が存在しますコードを読めるままにしておきます。 –

+1

私はそれを読みやすくしたと思った。 – Drutten

+2

あなたが持っているものは、読みやすく、簡単に解析するのが簡単です。技術的なレベルでは、人々がどのようなコードを思いつくのか興味を持っていますが、私はおそらくこれに固執したり、小切手を名前付きの方法などに移行したりする可能性があります。 –

答えて

12

とbが偽であるため、第1のループ終了した場合には、その

if(a||b) 
{ 
    X(); 
    if(a) 
    { 
     Y(); 
    } 
} 
0

本当に、多分あなたは上に値を渡すことができない二LOOP-をチェックする必要がないので、これは、良いだろうXメソッドを呼び出し、それがAならばYを呼び出して、if文を1つだけ返します。

if(a || Y() || b) X(); 

しかし、あなたは、このコードは別の人によって読まれることを考慮に取る必要があります。これは正直、あなたが書くことができ、あなたのYは、()メソッドは常にtrueを返した場合、それを

3

を処理するために、はるかに明確な方法でありますしたがって、読みやすく、他人の意味を説明する必要があります。だから、最善の解決策は、B、X、Yの意味に依存し、次のすべてが異なるセマンティックな意味で正しいようになります。

if(a || b) 
{ 
    X(); 
    if(a) Y(); 
} 

または

if(a) 
{ 
    X(); 
    Y(); 
} 
else if(b) 
{ 
    Y(); 
} 
+0

'Y()'がbooleanにキャストできるものを返す場合、最適化されていない限り、 '(Y()|| true)'を使うことができます。このような読みやすさが失われるので、実際には素晴らしいアイディアではありません。 – Matt

関連する問題