Логические операции работают исключительно с булевыми значениями (true /false), они нужны для проверки выполнения условия. Существует только два варианта результата: true (истина, условие выполняется), false (ложь, условие не выполняется).
Все конструкции if, проверки в циклах while/for и условия switch реализованы внутри целиком на логических операциях.
Выделяют три основных оператора: И, ИЛИ, НЕ
| Оператор | Название | Описание работы |
|---|---|---|
&& | Логическое И | Результат равен true только тогда, когда обе части выражения равны true; есть короткое замыкание вычислений |
| || | Логическое ИЛИ | Результат сразу true, если хотя бы одна часть равна true; есть короткое замыкание вычислений |
!expr | Логическое НЕ (инверсия) | Инвертирует булево значение: true превращается в false, false в true |
Операторы И, ИЛИ, НЕ по принципу похожи на последовательные и параллельные цепи из школьного курса физики. Последовательная цепь соответствует И, параллельная — ИЛИ.
1. Логическое НЕ !
Инвертирует значение одного булева выражения.
Синтаксис:
!булево_выражение
Пример
void main() {
bool isMale = false;
print(!isMale); // true
bool flag = true;
print(!flag); // false
}Code language: PHP (php)
Изначально isMale имеет значение false, а flag — true; оператор НЕ меняет их на противоположные.
Можно применять и к целым выражениям, например
void main() {
int age = 12;
print(!(age>18)); // true
}Code language: JavaScript (javascript)
Выражение age > 18 изначально даёт false, а стоящий впереди ! инвертирует результат и выводит true.
2. Логическое И &&
| Выражение | Результат |
|---|---|
true && true | true |
true && false | false |
false && true | false |
false && false | false |
Результат будет true только при двух true; если хотя бы одна часть false — результат всегда false.
Особенность короткого замыкания: если левая часть равна false, код справа не выполняется, сразу возвращается false.

Лампа загорается (true) только при замкнутых двух выключателях (true). Если хотя бы один выключатель открыт (false), лампа не горит (false). Как только левая часть оказалась false, правую проверять не нужно.
void main() {
bool fun1() {
print("Функция выполнилась!");
return true;
}
bool left = false;
// Левая часть false, поэтому fun1() не запустится
bool res = left && fun1();
print("Конечный результат: $res");
}Code language: PHP (php)
Результат выполнения
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Конечный результат: false
Code language: JavaScript (javascript)
Даже если внутри fun1 есть ошибки или исключения, они не возникнут — функция не запускается вообще.
Пример использования логического И
void main() {
String name = 'admin';
String password = '123321';
// && условие работает только при двух true
if (name=='admin' && password =='456654') {
print("Вход выполнен");
} else {
print("Неверный логин или пароль");
}
}Code language: JavaScript (javascript)
Результат выполнения
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Неверный логин или парольCode language: CSS (css)
3. Логическое ИЛИ ||
Если левая часть равна true, код справа не выполняется, сразу возвращается true.
| Выражение | Результат |
|---|---|
| true || true | true |
| true || false | true |
| false || true | true |
| false || false | false |
Рассмотрим пример
void main() {
bool fun1() {
print("Функция запущена");
return true;
}
// Левая часть true, срабатывает короткое замыкание, fun1 не запустится
bool res = true || fun1();
print(res); // true
}Code language: PHP (php)
Так как левая часть оператора || равна true, функция fun1 справа не выполняется.

При двух выключателях лампа загорается, если замкнут хотя бы один (true).
void main() {
bool isParentAgree = true;
int age = 12;
if(age>=13 || isParentAgree){
print("Можно пройти");
}
}Code language: JavaScript (javascript)
Итог
A && B: если A равно false, сразу возвращается false, B не проверяется и не выполняется
A || B: если A равно true, сразу возвращается true, B не проверяется и не выполняется
Это ускоряет работу программы и защищает от ошибок (часто используется при проверке на null)
Пример:
String? name;
// Обращаемся к length только если name не null; короткое замыкание предотвращает ошибку null
if(name != null && name.length > 0)
{
}Code language: JavaScript (javascript)
Если вызвать name.length напрямую — появится ошибка, потому что переменная name равна null и не имеет свойства length. Сначала проверяем name != null; если name null, первое условие false, остальной код не запускается, ошибки нет.
Приоритет трёх логических операторов
! > && > ||
Как и в математических вычислениях, сначала выполняются операторы с высоким приоритетом. Чтобы изменить порядок расчётов, используйте скобки
().
if (!done && (col == 0 || col == 3)) {
// ...Выполнить действие...
}Code language: JavaScript (javascript)
Последовательность расчёта:
- Внутри скобок: сначала вычисляем
col == 0 || col == 3(проверяем, столбец равен 0 или 3) - Делаем инверсию через
!done - Соединяем два результата оператором
&&
Пример
void main() {
bool done = false;
int col = 3;
// Официальный пример
if (!done && (col == 0 || col == 3)) {
print("Логика выполнена: не завершено и столбец равен 0 или 3");
}
// Демонстрация логического НЕ !
bool isFinish = true;
print(!isFinish); // false
// Демонстрация логического И &&
int a = 10, b = 20;
if (a > 5 && b > 10) {
print("a больше 5 И b больше 10");
}
// Демонстрация логического ИЛИ ||
int score = 55;
if (score < 60 || score > 90) {
print("Оценка неудовлетворительная ИЛИ отличная оценка");
}
// Демонстрация короткого замыкания
bool func() {
print("Функция выполнилась");
return true;
}
false && func(); // Левая часть false, вывода от функции не будет
true || func(); // Левая часть true, вывода от функции не будет
}Code language: PHP (php)
Результат выполнения
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Логика выполнена: не завершено и столбец равен 0 или 3
false
a больше 5 И b больше 10
Оценка неудовлетворительная ИЛИ отличная оценкаCode language: JavaScript (javascript)