Подтвердить что ты не робот

Есть ли разница между использованием нескольких операторов if и else if?

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

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

4b9b3361

Ответ 1

Да, возможно. Рассмотрим это (С#, Java, что угодно):

int x = GetValueFromSomewhere();

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

vs this:

int x = GetValueFromSomewhere();

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

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

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

int x = ...;

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

Если вы избавитесь от "else" здесь, то, как только одно условие будет соответствовать, остальное тоже будет.

Ответ 2

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

Ответ 3

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

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

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

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

Если оба cond A и cond B истинны, оба действия будут выполняться.

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

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

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