2016-03-23 5 views
4

У меня есть следующий код:Могу ли я объединить эти два оператора if?

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

if (a) 
{ 
    Y(); 
} 

Могу ли я каким-то образом объединить эти два, если-заявления?

+3

ли иметь в виду, есть значение оставляя читаемый код. –

+1

Я думал, что просто сделал его читаемым. – Drutten

+2

То, что у вас есть, легко читается и легко анализируется. На техническом уровне мне было бы интересно узнать, какие кодовые люди придумали, но я, скорее всего, все равно буду придерживаться этого или перенести чек в именованный метод или что-то еще. –

ответ

12

Это было бы лучше, потому что если первый цикл завершается, потому что а и Ь являются ложными, то нет необходимости проверять вторые петли

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

Не на самом деле, может быть, вы могли бы передать значение на X, и если это A, то он будет вызывать Y, давая только один оператор if. Это честно является гораздо более понятным способом справиться с этим

3

Если Y() метод всегда возвращает истину, вы можете написать:

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

Но вам необходимо принять во внимание, что этот код будет читаться другим лицом , поэтому он должен быть легко читаемым и объяснить его значение для другого человека. Так что лучшее решение зависит от значения а, Ь, X и Y. И все следующие будут правильными с различными смысловыми значениями:

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

или

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

Если 'Y()' возвращает все, что может быть использовано для boolean, тогда вы можете использовать '(Y() || true)', если это не оптимизировано. Вы действительно теряете некоторую читаемость, так что это не очень хорошая идея. – Matt

Смежные вопросы