вложенные операторы if - PullRequest
       15

вложенные операторы if

0 голосов
/ 05 августа 2011

Что лучше, вложив оператор if внутри блока if или внутри блока else?

а.

if (cond1)
   if (cond2){
      statement1;
      statement2;
      ...
   }
   else {
      statement3;
      statement4;
      ...
   }

else {
   statement5;
   statement6;
   ...
}

б.

if (!cond1) {
   statement5;
   statement6;
   ...
}

else if (cond2) {
   statement1;
   statement2;
   ...
}

else {
   statement3;
   statement4;
   ...
}

Спасибо за ответы до сих пор. Я только что отредактировал параметры, но моя главная проблема на самом деле заключается в следующем: если у вас есть выбор (путем изменения условных выражений), лучше ли вкладывать оператор if на более высокий уровень блока if's if или блока else? (a) является просто примером вложения if в блок if, а (b) является примером вложения if в блок else. Еще раз спасибо за все время.

Ответы [ 3 ]

1 голос
/ 05 августа 2011

РЕДАКТИРОВАТЬ : Спасибо за разъяснение вопроса. Теперь вопрос действительно о стиле и сводится к тому, что наиболее читабельно. Вообще говоря, последнее лучше, когда у вас есть истинное многофакторное условие, то есть в некоторой точке кода есть три возможных условия, одинаково вероятных и одинаково разумных. Первый может быть чище, когда семантически cond1 является реальным драйвером, а cond2 является своего рода подчиненным условием, о котором люди думают, только когда cond1 истинно.

СТАРЫЙ ОТВЕТ:

Вот одна из интерпретаций вопроса («вложенность в потом»):

if (cond1) {
    if (cond2) {
        A
    }
} else {
    B
}

Это должно быть написано, как указывает Джастин, как

if (cond1 && cond2) {
    A
} else {
    B
}

, если только в коде if cond1 не должно быть кода, который не в области действия if cond2.

Другая интерпретация вашего вопроса («вложенность в другое»):

if (cond1) {
    A
} else {
    if (cond2) {
        B
    }
}

В этом случае вы должны переписать как

if (cond1) {
    A
} else if (cond2) {
    B
}

Потому что это лучше выражает идею многомерного условного. Опять же, если есть что-то, что входит в сферу действия не cond1, но не входит в сферу действия cond2, то вам нужно вложить.

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

1 голос
/ 05 августа 2011

На самом деле, ваши примеры не совпадают. Я бы переписал первый, чтобы быть:

if(cond && cond2)
{

}
else
{

}

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

if(cond)
{
    if(cond2)
    {
        // Stuff that requires both conditions to be true.
    }

    // Stuff that requires only the first condition to be true.
}
else
{

}
0 голосов
/ 05 августа 2011

Редактировать: В этом случае я не думаю, что либо обязательно лучше. На мой взгляд, (б) гораздо легче читать и следовать по логике. Либо один будет делать, хотя!

Соответствует ли else в (a) первому оператору if или второму? По тому, как вы отступили, я бы предположил, что он соответствует первому оператору if, но если это так, то два ваших примера логически не совпадают.

...