Выражение 'if let'
Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 4 из 66.
Иногда вам нужно проверить только один конкретный шаблон, и вас не интересуют все остальные возможности. Написание полного выражения match всего с одной значимой ветвью и универсальным шаблоном _ может показаться излишне многословным. Rust предоставляет if let как более лаконичную альтернативу для таких ситуаций.
Выражение if let позволяет объединить сопоставление с образцом и условную логику в одном читаемом выражении. Вот базовый синтаксис:
if let pattern = value {
// код, который выполнится, если шаблон совпал
}Например, вместо того чтобы писать match с только одной полезной ветвью:
let number = 5;
match number {
5 => println!("Found five!"),
_ => (), // ничего не делать для других значений
}Вы можете использовать if let, чтобы сделать код чище:
let number = 5;
if let 5 = number {
println!("Found five!");
}Выражение if let выполняет блок кода только в том случае, если шаблон совпадает. Если совпадения нет, ничего не происходит — нет необходимости в явном блоке «else», если только он вам не нужен.
Задание
ЛегкоВы получите число на вход. Прочитайте входные данные, преобразуйте их в целое число и используйте выражение if let, чтобы проверить, равно ли число ровно 42. Если оно совпадает, выведите "The answer!". Если не совпадает, ничего не выводите.
Требования:
- Используйте выражение
if let, чтобы проверить, равно ли число42 - Если число равно
42, выведите"The answer!" - Если число любое другое, ничего не выводите
Входные данные: Одно целое число
Выходные данные: Выведите "The answer!", если число равно 42, в противном случае ничего не выводите
Шпаргалка
Выражение if let предоставляет краткий способ сопоставления с одним шаблоном без написания полного оператора match.
Базовый синтаксис:
if let pattern = value {
// код, который выполнится, если шаблон совпадет
}Пример сравнения match и if let:
// Использование match
let number = 5;
match number {
5 => println!("Found five!"),
_ => (), // ничего не делать для других значений
}
// Использование if let (более кратко)
let number = 5;
if let 5 = number {
println!("Found five!");
}Выражение if let выполняется только тогда, когда шаблон совпадает. Если он не совпадает, ничего не происходит, если только вы не добавите явный блок else.
Попробуйте сами
use std::io;
fn main() {
// Чтение ввода
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let number: i32 = input.trim().parse().expect("Please enter a valid number");
// TODO: Напишите свой код ниже
// Используйте if let, чтобы проверить, равно ли число 42
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Продвинутое управление потоком выполнения
Выражение 'match'Сопоставление нескольких значенийСопоставление диапазоновВыражение 'if let'Циклы как выраженияИтоги — Простой парсер команд4Группировка данных с помощью структур
Что такое структура?Обзор структурДоступ к полям структурыИзменяемые структурыСтруктуры как параметры функцийКортежные структурыИтоги: создание структуры Book7Обработка ошибок с помощью 'Result'
Что такое 'Result'?Использование 'match' с 'Result'is_ok() и is_err()Сокращения: unwrap и expectОператор вопросительного знака '?'Парсинг строк в числаИтоги: функция безопасного деления10Замыкания и анонимные функции
Что такое замыкание?Определение простого замыканияЗамыкания с параметрамиЗахват окруженияИтоги: Простое замыкание-сумматор2Введение в векторы
Что такое вектор?Создание вектораДобавление элементов с помощью pushДоступ к элементам вектораИтерация по векторуИзменяемая итерацияУдаление элементовИтоги — Простой счетчик очков5Пары «ключ-значение» в Hash Map
Что такое Hash Map?Создание Hash MapВставка пар «ключ-значение»Доступ к значениямИтерация по Hash MapОбновление значенияУдаление парыИтоги — Счетчик слов8Проект: Простой инвентарь товаров
Настройка проектаДобавление товараПроверка наличияПродажа товараСобираем всё воедино3Список дел в командной строке
Настройка проектаДобавление задачиПросмотр всех задачУдаление задачиИтоговый код6Обработка отсутствия значения с 'Option'
Что такое 'Option'?Использование 'match' с 'Option'is_some() и is_none()Распаковка 'Option'Метод expectЗначение по умолчанию: unwrap_orИтоги: поиск элемента