Выбрать главу

Противоположное происходит, когда мы вызываем amISpeeding со скоростью 72. В этом случае мы превышаем скорость и выражение вычисляется как true с последующим появлением соответствующего уведомления.

Создание более сложных выражений

Про выражения следует знать, что они могут быть такими сложными или простыми, какими вы их сами сделаете. Они могут состоять из переменных, вызовов функций или одних значений. Они даже могут быть сделаны из сочетаний переменных, вызовов функций или голых значений, разделенных с помощью любых из описанных выше операторов. Важно сделать так, чтобы в итоге выражение вычислялось как true или false.

Привожу чуть более сложный пример:

let xPos = 300;

let yPos = 150;

function sendWarning(x, y) {

if ((x < xPos) && (y < yPos)) {

alert("Adjust the position");

} else {

alert("Things are fine!");

}

}

sendWarning(500, 160);

sendWarning(100, 100);

sendWarning(201, 149);

Обратите внимание на то, как выглядит условие внутри инструкции if, принадлежащей функции sendWarning:

function sendWarning(x, y) {

if ((x < xPos) && (y < yPos)) {

alert("Adjust the position");

} else {

alert("Things are fine!");

}

}

В данном случае было выполнено три сравнения. Во-первых, меньше ли x, чем xPos. Во-вторых, меньше ли y, чем yPos. И в-третьих — проверка, не расценивается ли первая и вторая инструкции как true, чтобы оператор && мог также вернуть это значение. Можно соединять в цепочки множество условных инструкций в зависимости от того, что мы делаем. Помимо запоминания действий самих операторов может быть непросто проследить, чтобы все условия и подусловия были правильно изолированы скобками.

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

Варианты инструкций if…else

Мы почти закончили с инструкцией if. Осталось лишь разобраться с ее «родственниками».

Одиночная инструкция if

Первый вариант — это одиночная инструкция if без родственника else:

if (weight > 5000) {

alert("No free shipping for you!");

}

В этом случае если выражение вычисляется как true, то все отлично. Если как false, тогда код просто пропускает уведомление и переходит к выполнению следующих действий. При работе с инструкциями if блок else является опциональным. Чтобы составить контраст одиночной инструкции if, на помощь спешит ее родня.

Устрашающая инструкция if…else-if…else

Не все можно четко уложить в одиночную инструкцию if или if…else. В таких ситуациях можно использовать ключевое слово else if, чтобы создавать цепочки инструкций if. Не будем вдаваться в подробности, а просто посмотрим следующий пример:

if (position < 100) {

alert("Do something!");

} else if ((position >= 200) && (position < 300)) {

alert("Do something else!");

} else {

alert("Do something even more different!");

}

Если первая инструкция if будет вычислена как true, тогда обработка кода пойдет по ветке первого уведомления. Если первая инструкция окажется false, тогда обработка переходит к вычислению инструкции else if, проверяя, true она или false. Это будет продолжаться, пока код не будет обработан до конца. Другими словами, обработка нашего кода — это движение вниз через все инструкции if и else if, пока одно из выражений не будет вычислено как true:

if (condition) {

} else if (condition) {

} else if (condition) {

} else if (condition) {

} else if (condition) {

} else if (condition) {

} else {

}

Если ни одна из инструкций не имеет выражений, вычисляемых как true, то выполняется обработка кода внутри блока else (если таковой существует). Если блока else нет, тогда выполнение просто перейдет к следующей части кода, находящейся за пределами инструкций if. С помощью более сложных выражений и инструкций if…else if вы можете выразить практически любое решение, которое потребуется вычислить в коде.

Фух

Теперь вы знаете все, что нужно знать об инструкции if. Пришло время познакомиться с совершенно иным видом условных инструкций…