Далее на странице...
Предыдущая статья была теоретической. Это было началом разговора о булевой логике и операторах И ИЛИ и НЕ. Но вернемся к работе с кодом и узнаем, как логические операторы работают в JavaScript.
Здесь будут использоваться булевы переменные из прошлой лекции. Напомним, что у персонажа Сары есть водительские права и у нее хорошее зрение.
Для начала, допустим, что переменные hasDriverLicense и hasGoodVision принимают истинное значение true. Условно это переменные А и B.
const hasDriverLicense = true; // A
const hasGoodVision = true; // B
Исходные данные есть и теперь мы начнем работать с операторами И, ИЛИ и НЕ.
Оператор И - Два амперсанда &&
Оператор И в JavaScript обозначается как два амперсанда &&.
Пример 1.1
const hasDriverLicense = true; // A
const hasGoodVision = true; // B
console.log(hasDriverLicense && hasGoodVision);
Результат
true
В результате мы видим true. Так как Истина И Истина в результате дают Истину: true && true --> true
Пример 1.2
const hasDriverLicense = true; // A
const hasGoodVision = false; // B
console.log(hasDriverLicense && hasGoodVision);
Результат
false
Здесь в результате мы видим false. Следует запомнить, что результатом Истины И Лжи является Ложь: true && false --> false.
Оператор ИЛИ - Две вертикальные лини ||
Продолжим работать с примером 1.2. Только теперь будет задействован оператор ИЛИ.
Оператор ИЛИ в JavaScript обозначается как две вертикальные лини ||.
Пример 1.3
const hasDriverLicense = true; // A
const hasGoodVision = false; // B
console.log(hasDriverLicense || hasGoodVision);
Результат
true
В результате мы видим true. И это известно из прошлой статьи: Истина ИЛИ Ложь - это Истина: true || false --> true.
В случае с оператором ИЛИ достаточно, чтобы один из операндов имел значение true, чтобы все выражение также было Истинным.
Оператор НЕ - Восклицательный знак !
Оператор НЕ в JavaScript обозначается восклицательным знаком !.
Пример 1.4
const hasDriverLicense = true; // A
console.log(!hasDriverLicense); // !A
Результат
false
В результате мы видим false. Из прошлой статьи известно, что оператор НЕ инвертирует логическое значение - меняет его на противоположное: A --> true; !A --> false.
Составление условий и принятие решений
Теперь, когда мы знаем, как себя ведут булевы переменные совместно с логическими операторами И ИЛИ и НЕ, мы можем использовать это для составления условий if-else и принятия решений.
Допустим, мы хотим определить, может ли Сара вести машину или нет. Условием, при котором Сара может водить, является наличие водительских прав и хорошее зрение. В результате мы должны увидеть одну из строк (в зависимости от значения true или false в условии):
Sarah is able to drive - Сара способна водить машину
Someone else should drive - Кто-то другой должен сесть за руль
Итак, используем булевы переменные и булеву логику для моделирования комплексных ситуаций. На самом деле это довольно просто.
Пример 2.1
const hasDriverLicense = true; // A
const hasGoodVision = false; // B
const shouldDrive = hasDriverLicense && hasGoodVision;
if (shouldDrive) {
console.log('Sarah is able to drive');
} else {
console.log('Someone else should drive...');
}
Результат
Someone else should drive...
В результате мы видим Someone else should drive... - Кто-то другой должен сесть за руль. Как работает этот код?
-
Условие в блоке if: if(shouldDrive) не что иное, как логическое выражение if(hasDriverLicense && hasGoodVision). И в данном случае оно ложно - false.
-
Как работает конструкция if-else должно быть известно: если условие/выражение hasDriverLicense && hasGoodVision истинно, то выполняется блок if, в противном и в данном случае выполняется блок else.
Пример 2.2
Изменим одно из значений: false на true для переменной B.
const hasDriverLicense = true; // A
const hasGoodVision = true; // B
if (hasDriverLicense && hasGoodVision) {
console.log('Sarah is able to drive');
} else {
console.log('Someone else should drive...');
}
Результат
Sarah is able to drive
В результате мы видим Sarah is able to drive - Сара способна водить машину, потому что в этом примере выражение if(hasDriverLicense && hasGoodVision) истинно - true и выполняется блок if.
И и ИЛИ - Больше двух параметров
Код в примерах 2.1 и 2.2 работает правильно, поэтому переходим к следующему этапу и добавим третий параметр isTired - усталость. Таким образом, у нас будет еще одна переменная C.
Пример 3.1
const hasDriverLicense = true; // A - Наличие прав
const hasGoodVision = true; // B - Хорошее зрение
const isTired = false; // C - Усталость
console.log(hasDriverLicense || hasGoodVision || isTired);
Результат
true
В примере использовался оператор ИЛИ || и в результате мы видим true. При использовании оператора И && результат будет аналогичен - true, так как все переменные истинны: принимают значение true.
Если же при использовании оператора И && одно из значений изменить на false, то и результат будет false.
Пример 3.2
const hasDriverLicense = true; // A - Наличие прав
const hasGoodVision = true; // B - Хорошее зрение
const isTired = false; // C - Усталость
console.log(hasDriverLicense && hasGoodVision && isTired);
Результат
false
В случае с логическим оператором И достаточно, чтобы хотя бы один из операндов имел значение false, чтобы все выражение также было ложным - false.
Составление условий - Больше двух параметров
Используем пример 3.1 с тремя логическими переменными, чтобы процесс принятия решений при составлении условий зависел от большего числа факторов (см. исходные примеры 2.1 и 2.2).
Немного логики. Переменная isTired обозначает усталость. И в логическом контексте успешного вождения усталости быть не должно.
Поэтому далее в условии конструкции if-else наряду с переменными hasDriverLicense - наличие прав и hasGoodVision - хорошее зрение будет фигурировать !isTired - НЕ усталость (нет усталости).
Пример 4.1
const hasDriverLicense = true; // A - Наличие прав
const hasGoodVision = true; // B - Хорошее зрение
const isTired = true; // C - Усталость
// Наличие прав и Хорошее зрение и НЕ Усталость
if (hasDriverLicense && hasGoodVision && !isTired) {
console.log('Sarah is able to drive');
} else {
console.log('Someone else should drive...');
}
Результат
Someone else should drive...
В результате мы видим Someone else should drive... - Кто-то другой должен сесть за руль, так как один из операндов !isTired - НЕ isTired принимает значение false.
Соответственно логическое выражение hasDriverLicense && hasGoodVision && !isTired тоже false.
И так как в условии имеет место ложь false, то выполняется код блока else.
Пример 4.2
Если же переменная isTired изначально будет принимать ложное значение false, то в логическом выражении НЕ isTired будет принимать значение true. И тогда Сара будет допущена к вождению:
const hasDriverLicense = true; // A - Наличие прав
const hasGoodVision = true; // B - Хорошее зрение
const isTired = false; // C - Усталость
// Наличие прав и Хорошее зрение и НЕ Усталость
if (hasDriverLicense && hasGoodVision && !isTired) {
console.log('Sarah is able to drive');
} else {
console.log('Someone else should drive...');
}
Результат
Sarah is able to drive
Здесь все верно. В результате мы видим Sarah is able to drive, то есть Сара способна водить машину.
Итак, использование логических операторов И, ИЛИ и НЕ в JavaScript позволяет моделировать различные виды комплексных решений, подобных тому, что было рассмотрено.
Не стоит расстраиваться, если для кого-то эта тема оказалась немного запутанной. Потому что с трудностями сталкиваются многие из тех, кто только начинает программировать.
Возможно, следует потратить немного времени после изучения этого материала и снова проанализировать, что здесь происходило. Как вариант нужно вернуться и к прошлой статье. Нужно быть уверенным в том, что эта тема ясна и понятна.