🦊 FoxWiki

Логические операторы

Одного условия часто не хватает. Пустить игрока в комнату можно только если у него есть и пропуск, и он не в чёрном списке. Отправить уведомление нужно если истёк срок или произошла ошибка. Скидку давать только если покупатель зарегистрирован и сумма больше 1000.

Для таких составных проверок используются три логических оператора: and, or и not.


and — оба условия должны быть истинны

and возвращает истину только если оба операнда истинны. Если хоть один ложен — результат ложен.

Редактор Lua
1
2
3
4
5
6
7
8
Редактор Lua
1
2
3
4
5
6
Редактор Lua
1
2
3
4
5
6
7
8
9
10

Таблица истинности and:

ABA and B
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

or — достаточно одного истинного условия

or возвращает истину если хотя бы один операнд истинен. Ложен только если оба ложны.

Редактор Lua
1
2
3
4
5
6
Редактор Lua
1
2
3
4
5
6
7
Редактор Lua
1
2
3
4
5
6
7
8
9
10

Таблица истинности or:

ABA or B
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

not — инверсия

not переворачивает логическое значение: true становится false, false становится true.

Редактор Lua
1
2
3
4
5
Редактор Lua
1
2
3
4
5
6
Редактор Lua
1
2
3
4
5
6
7
8

Приоритет операторов

Когда в выражении несколько операторов, порядок вычисления такой:

  1. not — первым
  2. and — вторым
  3. or — последним
Редактор Lua
1
2
3
4
5

Когда не уверен — ставь скобки явно:

Редактор Lua
1
2
3
4
5
6
7
8

Ленивые вычисления

Lua вычисляет логические выражения лениво: как только результат очевиден — вычисление прекращается.

  • В A and B: если A ложно — B даже не оценивается (результат уже ложен)
  • В A or B: если A истинно — B даже не оценивается (результат уже истинен)

Это важно, когда вторая часть может вызвать ошибку:

Редактор Lua
1
2
3
4
5
6
7
Редактор Lua
1
2
3
4
5

or для значений по умолчанию

Lua возвращает не просто true/false, а само значение из выражения. Это позволяет использовать or для задания значений по умолчанию:

Редактор Lua
1
2
3
4
5
6
7
Редактор Lua
1
2
3
4
Редактор Lua
1
2
3
4
5
6
7

Практические примеры

Валидация формы регистрации:

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Логика прав доступа:

Редактор Lua
1
2
3
4
5
6
7
8
9
10

Проверка данных перед сохранением:

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

🚀 Задания

Задание 1 Создай переменные: hasAccount (bool), isVerified (bool), trialExpired (bool). Напиши условие: пользователь может войти только если у него есть аккаунт И он верифицирован И пробный период не истёк.

Задание 2 Напиши валидатор пароля: пароль должен быть длиннее 7 символов (#password > 7), не равен "password" и не равен "123456". Используй and и not.

Задание 3 Напиши функцию isWeekday(day), которая принимает строку с днём недели и возвращает true, если это рабочий день (не суббота и не воскресенье). Используй not и and.

Задание 4 Напиши функцию getTimeout(config), которая принимает таблицу с настройками. Если config.timeout задан — используй его, иначе по умолчанию 5000 миллисекунд. Используй паттерн or.

Задание 5 Определи без запуска кода, что выведет программа, и объясни почему:

Редактор Lua
1
2
3
4
5
6
7
8
9
НазадВвод данных
ДалееМатематические операции