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