Логические операторы. Часть 3
Часть раздела Fundamentals путешествия по Rust на Coddy — урок 23 из 75.
При проверке нескольких условий компьютер прекращает проверку, как только становится известен окончательный результат (это называется сокращенным вычислением).
Например:
let x: i32 = 0;
let y: i32 = 5;
let result: bool = x != 0 && y / x > 2;Здесь x равно 0, поэтому выражение y / x > 2 не будет вычисляться. Если мы изменим порядок на обратный:
let result: bool = y / x > 2 && x != 0;Это приведет к ошибке, так как y будет разделено на 0, что недопустимо в математике.
Эта техника используется для оптимизации вычисления логических выражений. Например:
let a: i32 = 0;
let b: i32 = 2;
let c: i32 = 3;
let d: i32 = 5;
let result: bool = (a > 0 && b < 2) || (c < -5 && d < 10);В этом примере b < 2 и d < 10 не будут вычисляться, так как a > 0 и c < -5 оба ложны.
Задание
НовичокДавайте создадим программу, чтобы определить, является ли день подходящим для производства энергии солнечными панелями
Инициализируйте следующие переменные:
is_sunnyсо значением truewind_speedсо значением 5.4temperatureсо значением 23solar_panel_outputсо значением 9is_cloudyсо значением false
Создайте одно логическое выражение, которое проверяет ВСЕ следующие условия:
- Солнечно
- Скорость ветра меньше 10
- Выработка солнечной панели меньше 15
- Температура выше 20 ИЛИ облачности нет
Шпаргалка
Rust использует сокращенные вычисления (short-circuit evaluation) при проверке нескольких условий — он прекращает вычисление, как только определен окончательный результат.
С оператором && (И), если первое условие ложно, второе не будет вычисляться:
let x: i32 = 0;
let y: i32 = 5;
let result: bool = x != 0 && y / x > 2; // Безопасно - y/x не будет вычислятьсяС оператором || (ИЛИ), если первое условие истинно, второе не будет вычисляться:
let a: i32 = 0;
let b: i32 = 2;
let c: i32 = 3;
let d: i32 = 5;
let result: bool = (a > 0 && b < 2) || (c < -5 && d < 10);
// b < 2 и d < 10 не будут вычислятьсяЭта оптимизация предотвращает ненужные вычисления и позволяет избежать ошибок во время выполнения, таких как деление на ноль.
Попробуйте сами
fn main() {
// Инициализация переменных
// Полное логическое выражение
let result: bool =
// Не удаляйте строки ниже
println!("Checking conditions for solar energy production...");
println!("1. Is it sunny? {}", is_sunny);
println!("2. Is wind speed safe? {}", (wind_speed < 10.0));
println!("3. Can panels produce more? {}", (solar_panel_output < 15));
println!("4. Is temperature good OR no clouds? {}", (temperature > 20 || !is_cloudy));
println!("\\nFinal result - Good day for solar energy production: {}", result);
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Fundamentals
4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияАрифметические сокращенияОператоры сравненияСравнение строк7Основы ввода-вывода
Вывод в консольЧтение ввода пользователяПовторение — До 120Повторение — True или False5Операторы. Часть 2
Логические операторы. Часть 1Логические операторы. Часть 2Повторение — простая логикаЛогические операторы. Часть 38Приложение-калькулятор
Приветственное сообщениеПолучение чисел3Переменные. Часть 2
Объявление типаСоглашения об именованииВывод типовПовторение: инициализация переменныхПриведение типов9Циклы
Цикл For по последовательностиЦикл WhileОператор BreakОператор ContinueВложенные циклыМетки цикловБесконечный циклПовторение — Динамический ввод