Сопоставление диапазонов
Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 3 из 66.
Когда вам нужно проверить, попадает ли значение в определённый диапазон чисел, написание отдельных ветвей для каждого отдельного значения было бы утомительным. Выражение match в Rust поддерживает паттерны диапазонов, которые позволяют сопоставлять значение с непрерывным интервалом значений, используя синтаксис start..=end.
Оператор ..= создает включающий диапазон, что означает, что и начальное, и конечное значения включаются в сопоставление. Вот как можно использовать диапазоны в ветках match:
let temp = 20;
match temp {
30..=50 => println!("Hot"),
10..=29 => println!("Warm"),
_ => println!("Cold"),
}В этом примере температура 20 будет соответствовать диапазону 10..=29 и выведет "Warm". Диапазон 30..=50 включает как 30, так и 50, поэтому температура ровно 30 или 50 приведет к результату "Hot".
Задание
ЛегкоВы получите возраст в качестве входных данных. Прочитайте входные данные, преобразуйте их в целое число и используйте выражение match с паттернами диапазонов, чтобы вывести соответствующую возрастную категорию.
Требования:
- Если возраст
0..=12, выведите"Child" - Если возраст
13..=19, выведите"Teenager" - Если возраст
20..=64, выведите"Adult" - Если возраст
65..=120, выведите"Senior" - Для любого другого возраста выведите
"Invalid age"
Входные данные: Одно целое число, представляющее возраст
Выходные данные: Выведите возрастную категорию: "Child", "Teenager", "Adult", "Senior" или "Invalid age"
Шпаргалка
Шаблоны диапазонов в выражениях match позволяют сопоставлять значение с непрерывным отрезком значений, используя синтаксис start..=end, где ..= создаёт включающий диапазон (включаются как начальное, так и конечное значения).
let score = 85;
match score {
90..=100 => println!("Grade: A"),
80..=89 => println!("Grade: B"),
70..=79 => println!("Grade: C"),
60..=69 => println!("Grade: D"),
_ => println!("Grade: F"),
}В этом примере значение 85 соответствует диапазону 80..=89 и выводит "Grade: B". Диапазон 90..=100 включает как 90, так и 100.
Попробуйте сами
use std::io;
fn main() {
// Чтение ввода
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let age: i32 = input.trim().parse().expect("Please enter a valid number");
// TODO: Напишите свой код ниже, используя выражение match с шаблонами диапазонов
// Вывод результата
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела 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Итоги: поиск элемента