Выражение 'match'
Часть раздела Логика и управление потоком путешествия по Rust на Coddy. Урок 1 из 66.
Выражение match — это мощный инструмент Rust для сопоставления с образцом, который позволяет сравнивать значение с различными шаблонами и выполнять код в зависимости от того, какой шаблон подходит. Представьте его как более продвинутый вариант инструкций if, который позволяет элегантно обрабатывать несколько условий.
Вот базовый синтаксис выражения match:
match value {
pattern1 => code_to_run,
pattern2 => code_to_run,
_ => default_code,
}Каждая строка внутри match называется «ветвью». => отделяет шаблон от кода, который выполняется, когда этот шаблон совпадает. Подчёркивание _ — это специальный шаблон-подстановочный знак, который совпадает с чем угодно: он служит «универсальным вариантом» для любого значения, не совпавшего с другими шаблонами.
Вот простой пример, который проверяет число:
let number = 2;
match number {
1 => println!("One"),
2 => println!("Two"),
_ => println!("Other"),
}В Rust выражения match должны быть исчерпывающими, то есть обрабатывать все возможные значения. Поэтому подстановочный шаблон _ так важен: он гарантирует, что ты учёл все случаи, которые не были сопоставлены явно.
match — это выражение, поэтому оно также может возвращать значение. Если оно стоит последним выражением в функции, функция возвращает значение соответствующей ветви:
fn day_name(day: i32) -> String {
match day {
1 => String::from("Monday"),
2 => String::from("Tuesday"),
_ => String::from("Another day"),
}
}Поскольку эта функция возвращает String, каждая ветвь преобразует свой текст (&str) в String с помощью String::from или .to_string().
Задание
ЛегкоНапишите функцию describe_number, которая принимает num и возвращает строковое описание в зависимости от значения числа.
Используйте выражение match, чтобы возвращать разные описания для разных чисел.
Условия:
- Если
numравно0, верните"zero" - Если
numравно1, верните"one" - Если
numравно2, верните"two" - Если
numравно3, верните"three" - Для любого другого числа верните
"many"
Параметры:
num(i32): Число для описания
Возвращает: Строковое описание числа (String)
Попробуйте сами
fn describe_number(num: i32) -> String {
// Напишите код здесь
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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Итоги: поиск элементаПотренируйтесь самостоятельно: Онлайн-компилятор Rust