Когда использовать еще, если вместо, если? - PullRequest
0 голосов
/ 29 февраля 2020

Предположим, у нас есть этот код:

if (condition_1)
   do this
if (condition_2)
   do that
else
   do blablabla

А теперь этот:

if (condition_1)
   do this
else if (condition_2)
   do that
else
   do blablabla

А теперь давайте посмотрим, что происходит построчно. Если я не ошибаюсь, первая программа начинает проверять, является ли условие_1 истинным или ложным, тогда то же самое происходит с условием_2. И если ни одно из этих условий не выполняется, программа запускает "do blablabla".

Вторая программа запускается с проверки условие_1, и если оно ложно, то если проверяется условие_2. Если условие_2, если ложь, если ничего не делает (я имею в виду ничего, это игнорирует оператор else). Если это так, то второй оператор if из второй программы может быть заменен на:

if (!(condition_1) and condition_2)
   do that

Но тогда можно будет выполнить, я подумал, что все остальные операторы if могут быть заменены только в том случае, если с более длинным условием , Так можно ли заменить все остальное, если, используя только если? А когда "у блаблабла" побежит?

Ответы [ 2 ]

2 голосов
/ 29 февраля 2020

Первая часть:

 if (condition_1)
       do this

// previous if has nothing to do with this if & else 

if (condition_2)
   do that
else
   do blablabla

В этом случае, если condition_2 истинно, то будет выполнено do that, в противном случае do blablabla будет выполнено ..

Теперь вторая часть :

if (condition_1)
   do this
else if (condition_2)
   do that
else
   do blablabla

Здесь будет выполняться истинное условие first true, а остальные значения else if & else будут игнорироваться, все условия будут проверяться последовательно до else или true условие найдено. Если условия не выполняются, то else будет выполнен. Таким образом, do blablabla будет выполнен, если эти оба из двух условий false

И, наконец, да, второе if может быть заменено на:

if (!(condition_1) and condition_2)
   do that

Это потому, что второе if будет проверено (do that будет выполнено), только если condition_1 равно false .. и condition_2 равно true.

Что эквивалентно: (тогда и только тогда, когда condition_1 равно false)

if (!(false) and condition_2)
       do that

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

Пример:

if (a) {
    // do task1
} else if (b) {
    // do task2
} else if (c) {
    // do task3
} else {
    // do task4
}

Эквивалентно:

if (a) {
    // do task1
}
if (!a and b) {
    // do task2
}
if (!a and !b and c) {
    // do task3
}
if (!a and !b and !c) {
   // here is the else
   // do task4
}

Когда использовать else, если вместо if?

Вообще говоря, мы объединяем if, иначе if и else в конце, чтобы обеспечить выполнение только одного условия, если один равен true, остальные игнорируются и выполнения переходят к следующему из очень последняя строка (}) из последних else.

1 голос
/ 29 февраля 2020

Если я не ошибаюсь, первая программа начинает проверять, является ли условие_1 истинным или ложным, тогда то же самое происходит с условием_2. И если ни одно из этих условий не выполняется, программа запускает "do blablabla".

Нет, condition_1 не влияет на то, что происходит в condition_2. condition_1 может быть либо true или false, но во втором условии имеет значение только condition_2:

if (condition_1) {
   do this
}

// --- no connection here ---

if (condition_2) {
   do that
} else {
   do blablabla
}

Во второй версии все иначе, с тех пор condition_1 должно быть false для condition_2, который будет даже оценен. Это помогает убрать фигурные скобки:

if (condition_1) {
    do this
} else {
    if (condition_2) {
        do that
    } else {
        do blablabla
    }
}
...