2013-07-19 2 views
-1

я вдруг получил странное сомнение ..Java Уплотненный Если условие

Я хочу знать, является ли

if(a && b) { 
} 

такой же, как

if(a) { 
    if(b) { 
    } 
} 

или нет ..

Both случаи дают мне тот же результат. Но я все еще не чувствую комфорта, чтобы использовать первый метод в моем проекте.

Любые помогает?

+0

Это должно работать, на мой взгляд. –

+0

вы можете добавить другие операторы во внешнем блоке 'if' вне внутреннего' if', но в первом случае оба условия должны быть истинными, чтобы попасть внутрь блока 'if' – pratZ

ответ

1

Да, они такие же, насколько функциональны. && - оператор короткого замыкания. Таким образом, в a && b, b будет оцениваться только в том случае, если a оценивается как true.

То же самое относится к случаю с Вложенные if. внутренний if будет выполнен только тогда, когда внешний if оценивается в true. Но 1 st один показывает ваши намерения лучше, если вы хотите выполнить код, только если оба a и b - true.

Но одна разница в том, что вы можете реализовать функциональность a = true, b = false, в 2 й случае, добавив, что функциональность перед вложенными if начинается. Но вы не можете этого сделать в 1 st

1

Это же. В первом случае компилятор гарантирует, что второе условие не будет выполнено, если первое условие возвращает false.

0

a && b означает, что если a является Вт и так b, так:

не
if(a && b) { 
} 

не оставляет места для нерешительности, это все или ничего, только если a && b если тело будет выполнена, в то время как

if(a) { 
    if(b) { 
    } 
} 

оставляет вас в покое, если a, не учитывая b на данный момент. Поэтому, если вы хотите сделать некоторые действия перед проверкой b, вы можете.

Если вам нечего делать, только когда a, то два равны, а имхо - предпочтительнее, потому что это более читаемо.

0

Оба условия такие же, как и в первой: if(a && b){ }, вы проверяете с && оператором Так, в a && b, b будет оцениваться только если a оценивается истина.

в то время как во втором случае он проверяет значение a во внешнем условии if, и если он удовлетворяет, тогда он проверяет значение b во внутреннем состоянии if.

Но предпочтительнее кулак.

0

Да, это то же самое. Оператор && проверяет, являются ли оба условия истинными. Если вы вставляете свои операторы if, это равносильно тому, что второй будет проверяться только в том случае, если первое верно. Отделите их только, если вам нужно что-то сделанное, которое включает в себя a, являющееся истинным, но не b.

0

В обоих случаях это просто short-circuiting.

, в котором второй аргумент выполняется только или вычисляется, если первый аргумент не достаточно, чтобы определить значение выражения:

Короткий -циклическое выражение x Песок y (используя Песок для обозначения типа короткого замыкания) эквивалентно условному выражению, если x, тогда y else false; выражение x Sor y равносильно тому, что x, тогда истинное else y.

Приходит к синтаксису, первое, что (if(a && b)), которое украшает ваш код и, более читабельно.

2

При использовании If-то еще о то , если цикл будет выполняться только условие истинно: ---

if(condition){ 
//execute when it is true 
} 

В вашем случае, если вы используете двух переменных а и Ь с И ОПЕРАТОРА. Свойство AND OPERATOR - это если значение значения «Все» равно true, оно вернет true, иначе false.

Если вы хотите использовать ваш метод, то

/* 
check for your in a and b 
both are true 
*/ 
then your method will be execdute 

if(a && b) { 
//if a and b both return true(a=true,b=true) 
} 
0

Как многие заявляли передо мной: они технически эквивалентными (вплоть до семантики короткого замыкания).

Но я осмелюсь сказать & & оператор является предпочтительным в любой ситуации, и что это не просто дело вкуса. Вложенное, если сложнее читать в ежедневном коде с более чем просто контрольными утверждениями и оставляет больше места для ошибки.

В основном потому, что if(b) сообщает: «следующий блок выполняется только, если б верно».

Но это не то, что происходит! Блок выполняется только в том случае, если a и b являются истинными (это именно то, что первый метод общается довольно элегантно). Очень просто непреднамеренно вытащить его из контекста if(a) (в любой IDE есть много способов перетасовать код) и создать ошибку.

Вложенные, если также оставляют много места для ужасного кода позже.Код клика между внутренним и внешним может затруднить понимание того, какой код выполняется, особенно если a и b являются сложными выражениями. И все становится действительно отвратительно, когда кто-то решает бросить в несколько других высказываний .. :-) Просто нет способа попасть в этот беспорядок с одним оператором .

Некоторые могут утверждать, что эта «гибкость» является основанием для использования второго метода, но я бы сказал, что почти всегда есть способ переписать это чистое использование явных условий. Кодирование достаточно сложно, не тратя все ваши мозговые циклы на логику управления.

Нижняя строка: каждый Java-программист понимает семантику оператора условного-И. Опираясь на встроенные языковые конструкции вместо того, чтобы катить свои собственные эквиваленты, имеет большой путь к ремонтопригодности и правильности.

Надеюсь, это поможет.

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