Skip to content

Boolean: Булевые данные и логические операторы

Что такое булевые данные в Dart?

В языке программирования Dart булевый тип (bool) представляет собой два возможных значения: true (истина) и false (ложь). Булевые переменные используются в логических выражениях, условиях и операциях сравнения.

True - false

void main() {
  bool isDartFun = true;
  bool isJavaScriptBetter = false;
  print(isDartFun); // true
  print(isJavaScriptBetter); // false
}

Создание булевых переменных

Объявить булевую переменную можно с помощью ключевого слова bool:

void main() {
  bool isValid = true;
  bool isEmpty = false;
  print(isValid);
  print(isEmpty);
}

Также можно использовать выражения, которые возвращают булевый результат:

boolean scales

void main() {
  bool comparison = (5 > 3); // true
  bool equality = (10 == 10); // true
  bool notEqual = (7 != 5); // true
  print(comparison);
  print(equality);
  print(notEqual);
}

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

Dart поддерживает стандартные логические операторы:

  • && (логическое И): true, если оба операнда истинны.
  • || (логическое ИЛИ): true, если хотя бы один операнд истинен.
  • ! (логическое НЕ): инвертирует значение.
void main() {
  bool a = true;
  bool b = false;
 
  print(a && b); // false
  print(a || b); // true
  print(!a); // false
}

Практическое применение

  1. Проверка пустой строки

Если строка пустая (""), то ее свойство .isEmpty вернет true:

var fullName = '';
assert(fullName.isEmpty); // Проверяет, что строка пустая
  1. Проверка числа на ноль

Число 0 в Dart не является эквивалентом false, как, например, в JavaScript. Поэтому его нужно проверять с помощью сравнения (== 0):

var hitPoints = 0;
assert(hitPoints == 0); // Проверка, что значение равно нулю
  1. Проверка на null

Значение null в Dart — это отсутствие какого-либо значения. Проверять его можно так:

var unicorn = null;
assert(unicorn == null); // Проверка, что переменная равна null
  1. Проверка числа на NaN

Если в вычислениях произошло деление на ноль или другая операция, приводящая к неопределенному результату, то в Dart получится значение NaN (Not-a-Number). Проверить его можно с помощью метода .isNaN:

var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN); // Проверка, является ли число NaN

Булевый тип данных – основа логики программирования. В Dart он представлен типом bool, поддерживает логические операции и широко используется в условиях и циклах.

Домашнее задание

1. Анализ логических выражений

Задача: Что выдаст программа, если запросить значения a, b, c, d, e?

  1. Попробуйте сначала вычислить в уме и проговорите вслух, что делает каждая строка.
  2. Затем напишите программу и проверьте свои результаты.
  3. Сравните строчку вывода со своей:
void main() {
  bool a = (7 + 8) * 5 > 7 + 8 * 5;
  bool b = (7 + 8) * 4 != 7 + 4 * 5;
  bool c = (3 + 4 > 9 + 1) && (16 - 5 > 3 * 4);
  bool d = (16 / 2 < 6 + 2) || (4 + 5 <= 4 * 5);
  bool e = !(3 * 4 < 7 + 8);
 
  print(a);
  print(b);
  print(c);
  print(d);
  print(e);
  // Пример с конкатенацией:
  print(a.toString() + "\n" + b.toString() + "\n" + c.toString() + "\n" + d.toString() + "\n" + e.toString());
  print('$a\n$b\n$c\n$d\n$e');  // интерполяция строк
}

2. Проверка на совершеннолетие

Задача: Функция принимает возраст и возвращает true, если человек совершеннолетний (18+).

isAdult(20) → true
isAdult(16) → false

3. Проверка положительности числа

Задача: Напишите функцию, которая возвращает true, если число положительное.

isPositive(-5) → false
isPositive(10) → true

Задачи Dart bool, от Василия

Большие проекты развивают кругозор, маленькие задачи тренируют мастерство. Множественное повторение одного действия позволяет выполнять его на автоматизме, не задумываясь. Решение задач помогает закрепить пройденный материал и поддерживать себя в форме.

1. Программирование умного сейфа

Родители Васи Сидорова купили умный сейф и запрограммировали его на выдачу денег по отпечатку пальцев одного из родителей:

smartDepositBox(true, false) -> true
smartDepositBox(false, true) -> true
smartDepositBox(false, false) -> false
smartDepositBox(true, true) -> true

2. Мир в семье

После покупки сейфа в семье начался разлад по поводу выделения сыну денег, и родители решили перепрограммировать сейф таким образом, чтобы он выдавал деньги только при обоюдном согласии родителей:

smartDepositBoxVersionTwo(true, false) -> false
smartDepositBoxVersionTwo(false, true) -> false
smartDepositBoxVersionTwo(false, false) -> false
smartDepositBoxVersionTwo(true, true) -> true

3. Программирование “умного сейфа” с бабушкой

К родителям Васи Сидорова приехала бабушка, которая сказала, что она сама знает, когда давать ребёнку деньги. Напишите программу для выдачи денег Васе, если бабушка выдает деньги независимо от решения родителей:

verySmartDepositBoxVersionThree(mamaPermission, papaPermission, omaPermission)

4. Проверка на количество детей в поездке

В девятом классе Вася ездил со своим и параллельным классом в Париж. Известно, что на двоих учителей нельзя брать в поездку больше 25 детей. Напишите проверочный метод:

travelToParis(11, 15) -> false
travelToParis(11, 5) -> true

5. Программирование звонка на даче

На даче у родителей Васи Сидорова решили поставить звонок, который должен звонить при нажатии на кнопку звонка у калитки или у двери дома. Если соседские дети начинают играться и нажимать на кнопки звонка одновременно, звонок не должен реагировать. Напишите программу управления звонком:

doorbell(true, true) -> false
doorbell(false, false) -> false
doorbell(true, false) -> true

6. Программирование входной двери

  1. Программирование всё больше захватывало семью Василия, и они решили сделать полностью умный дом. Для начала они решили сделать входную дверь, учитывая новые стандарты. Дверь больше нельзя открыть обычным ключом, пока в доме есть интернет и она подключена к электросети. Напишите тесты для программы smartDoorCheckKey. Заказчик (бабушка Василия) хочет, чтобы мы проконтролировали работу сторонней фирмы.
  2. Сторонняя фирма не справилась с написанием программы. Напишите самостоятельно метод, который возвращает false, если дверь открыть ключом нельзя.

7. Программирование “умной двери” для Василия

Родители сделали всё программирование вокруг двери самостоятельно, не дожидаясь нас. Попробуйте угадать, как работает метод, который позволяет Василию открыть дверь телефоном, отпечатком пальца или введённым с клавиатуры паролем:

verySmartDoor(false, true, false) -> true
verySmartDoor(false, false, true) -> true
verySmartDoor(true, false, false) -> true
verySmartDoor(false, false, false) -> false

8. Программирование системы аварийного уничтожения космических кораблей

Василий вырос и запрограммировал систему аварийного уничтожения первых космических кораблей Земли, улетевших в Альфа-Центавру. Система уничтожения реагирует на ввод команд двух старших офицеров корабля:

bigBadaBoom(true, true) -> true
bigBadaBoom(false, false) -> false
bigBadaBoom(true, false) -> false

Дополнительные ссылки

  1. Официальная документация Dart
  2. Операторы в Dart
  3. Simulator.io - Онлайн-симулятор для построения и симуляции логических схем.
  4. Теория множеств
  5. Булева алгебра
21 февр. 2025 г.
andron13