Есть ли разница между использованием нескольких операторов if и других операторов if? - PullRequest
26 голосов
/ 09 января 2011

Этот вопрос относится конкретно к сценариям оболочки, но может касаться любого языка программирования.

Есть ли разница между использованием нескольких операторов if и использованием elif операторов в сценариях оболочки?И заявление case не будет работать в моей ситуации.

Ответы [ 4 ]

52 голосов
/ 09 января 2011

Да, потенциально. Учтите это (C #, Java, что угодно):

int x = GetValueFromSomewhere();

if (x == 0)
{
    // Something
    x = 1;
}
else if (x == 1)
{
    // Something else...
}

против этого:

int x = GetValueFromSomewhere();

if (x == 0)
{
    // Something
    x = 1;
}
if (x == 1)
{
    // Something else...
}

В первом случае произойдет только один из «Нечто» или «Нечто другое ...». Во втором случае побочные эффекты первого блока делают условие во втором блоке истинным.

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

int x = ...;

if (x < 10)
{
    ...
} 
else if (x < 100)
{
    ...
}
else if (x < 1000)
{
    ...
}

Если вы избавитесь от «другого» здесь, то, как только одно условие соответствует, остальные тоже будут.

10 голосов
/ 09 января 2011

Это связано с эффективностью и вашими потребностями. Если заявления выполняются независимо друг от друга. Каждый побежит. Иначе, если оператор выполняется только в случае неудачи предыдущего if.

7 голосов
/ 09 января 2011
if (x == 0) {
    // 1
}


if (x >= 0) {
    // 2
}

if (x <= 0) {
    // 3
}

Приведенный выше код выдаст значение, отличное от приведенного ниже кода для x=0.

if (x == 0) {
    // 1
} else if (x >= 0) {
    // 2
} else {
   // 3
}

В первом случае все операторы 1, 2 и 3 будутбыть исполненным за x = 0.Во втором случае будут только утверждения 1.

4 голосов
/ 09 января 2011

Если у вас есть несколько операторов if, каждое из них оценивается отдельно, и если условия верны, код во всех них может быть выполнен. Если у вас есть оператор if / elif, второе условие будет оцениваться только после определенного результата оценки первого условия.

Рассмотрим этот псевдокод:

If (cond A) { action 1}
If (cond B) { action 2}

Если оба параметра cond A и cond B имеют значение true, оба действия будут выполнены.

С другой стороны, этот псевдокод:

If (cond A) {action 1}
Elif (cond B) {action 2}

Будет выполнено только одно из двух действий (или ни одного), независимо от того, как оцениваются оба условия.

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