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

Логические операции работают исключительно с булевыми значениями (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 && truetrue
true && falsefalse
false && truefalse
false && falsefalse

Результат будет 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 || truetrue
true || falsetrue
false || truetrue
false || falsefalse

Рассмотрим пример

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)

Последовательность расчёта:

  1. Внутри скобок: сначала вычисляем col == 0 || col == 3 (проверяем, столбец равен 0 или 3)
  2. Делаем инверсию через !done
  3. Соединяем два результата оператором &&

Пример

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)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *