2015-01-19 10 views
-9

Я написал следующий код и смутил себя.Как определить, какой оператор if принадлежит else?

if(condition1) 
    if(condition2){ 
     doStuff() 
    } 
else { 
    doOtherStuff(); 
} 

Когда это отступают, похоже, что else принадлежит условию 1, если. Но если мы изменим некоторые пробелы, это выглядит, как будто это часть condition2 если так:

if(condition1) 
    if(condition2){ 
     doStuff() 
    } else { 
     doOtherStuff(); 
    } 

Так какой же он принадлежит? Я ставлю скобки для условия1, чтобы быть более ясным, но какой из них правильный?

+0

использовать явные скобки на обоих (все), если'S –

+0

Не избежать дополнительных фигурных скобок – Arvind

+2

Общее правило заключается в следующем . Else всегда принадлежит прилагаемому if (ближайшему, если) –

ответ

0

принадлежит condition2. Если вы хотите принадлежать его condition1 вы должны использовать круглые скобки

if(condition1) { 
    if(condition2){ 
     doStuff() 
    } 
} else { 
    doOtherStuff(); 
} 
3

Он принадлежит к condition2if заявление.

Причина этого заключается в том, что, так как ваш condition1 если заявление не обертку с кронштейнами ({}), это тело, предполагается, что это тело содержит один единственный заявление. Если посмотреть на condition2if (включая else), это действительный (if/else), и поэтому он считается целым.

Если вы хотите, чтобы else принадлежал внешнему if, вы должны обернуть тело первого в скобки.

if (condition1) { 
    if (condition2) { 

    } 
} else { 
    doOtherStuff(); 
} 

В общем, это хорошая практика всегда завернуть тела условных структур и петли с кронштейнами ({}) (даже если они содержат один вложенный оператор), так как код становится более читаемым и ремонтопригоден.

0

Вы правы, это соответствует тому, что когда-либо было последним, то есть вашим внутренним, если. Если вы хотите еще часть будет связана с внешним, если вы должны использовать фигурные скобки явно, как:

if(condition1) { 
    if(condition2){ 
     doStuff() 
    } 
} else { 
    doOtherStuff(); 
}