Плохо ли размещать if / else внутри другого? - PullRequest
4 голосов
/ 11 апреля 2011
if() {

}else {
    if (IsAlternateRow=='true')
        IsAlternateRow = 'false';
    else
        IsAlternateRow = 'true';
}

Могу ли я поместить оператор if и else внутри другого оператора else?

Ответы [ 9 ]

8 голосов
/ 11 апреля 2011

Примечание: вопрос был помечен как JavaScript после публикации этого ответа (изначально он был о Java, поэтому этот ответ касается Java).

В общем, этоПравильно размещать if и else внутри предложения else.

Однако в вашем коде есть несколько проблем.IsAlternateRow=='true' не является синтаксически допустимым.

  • Если это сравнение строк, вы должны использовать двойные кавычки и .equals();
  • Если это булево сравнение, вам лучшепросто сделав IsAlternateRow = !IsAlternateRow вместо всего вложенного if.
5 голосов
/ 11 апреля 2011

try

IsAlternateRow = !IsAlternateRow;

(обновлено, чтобы показать, как это будет выглядеть в вашем коде)

var IsAlternateRow = false;

if(/* -- insert equation here -- */) 
{
 // do something
} 
 else 
{
    IsAlternateRow = !IsAlternateRow;
}
4 голосов
/ 11 апреля 2011

Да, размещение if внутри else является вполне приемлемой практикой, но в большинстве случаев использование else if является более понятным и понятным. Э.Г.

if (test) {
   // Do something
} else if (otherTest) {
   // Do something else
} else {
   // Do a third thing
}

Фактически это сокращение для

if (test) {
   // Do something
} else {
     if (otherTest) {
         // Do something else
     } else {
         // Do a third thing
     }
}

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

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

4 голосов
/ 11 апреля 2011

return (IsAlternateRow.equals ('true'))? 'false': 'true'

3 голосов
/ 11 апреля 2011

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

Легко ли это прочитать?

Мелко вложенное if/else высказывания не страшны, но как только вы начнете вкладывать средства до тошноты, вам, вероятно, следует провести рефакторинг.

2 голосов
/ 11 апреля 2011

Это хорошо, но есть более простые способы сделать то, что вы делаете:

IsAlternateRow = !IsAlternateRow
1 голос
/ 11 апреля 2011

Правильный способ сделать это:

if() {

} else if (IsAlternateRow=='true') {
    IsAlternateRow = 'false';
}
 else
{
    IsAlternateRow = 'true';
}
1 голос
/ 11 апреля 2011

Чтобы ответить на ваш вопрос, да, вы можете бесконечно вкладывать операторы if / else.Код, который вы предоставили, без проблем скомпилируется.Несмотря на то, что вы говорите о Java, я думаю, что если это не псевдокод, он не даст желаемого результата.

1 голос
/ 11 апреля 2011

Да, вы можете. Если вы хотите вычислять один и тот же объект / переменную несколько раз, вы можете использовать оператор switch, но во многих случаях он находится в шахматном порядке, если оператор будет выполнять работу точно так же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...