Menu
Coddy logo textTech

Оператор Match

Часть раздела Fundamentals путешествия по Rust на Coddy — урок 26 из 75.

Выражение match позволяет сравнивать значение с рядом шаблонов и выполнять код в зависимости от того, какой шаблон совпал.

Вот базовая структура выражения match:

match variable {
	pattern1 => expression1,
	pattern2 => expression2,
	// ... больше шаблонов
	_ => default_expression,
}

За ключевым словом match следует значение, которое вы хотите проверить.

Каждая ветка match состоит из шаблона, за которым следует => и код для выполнения.

Нижнее подчеркивание _ — это вариант по умолчанию, который соответствует всему, что не подошло под другие шаблоны.

Вот пример:

let day = 3;
let day_name = match day {
	1 => "Monday",
	2 => "Tuesday",
	3 => "Wednesday",
	// ... больше шаблонов,
	_ => "Invalid day",
};

Для нескольких строк кода в ветке используйте блок:

let day = 3;
let day_name = match day {
	1 => {
		println!("First day of the week!");
		"Monday"
	},
	2 => "Tuesday",
	// ... другие случаи
	_ => "Invalid day",
};

Вы можете сопоставлять несколько шаблонов, используя |:

let day = 3;
let day_type = match day {
	1 | 2 | 3 | 4 | 5 => "Weekday",
	6 | 7 => "Weekend",
	_ => "Invalid day",
};

Выражения match в Rust должны быть исчерпывающими, что означает, что они должны охватывать все возможные значения. Компилятор проверит это за вас.

challenge icon

Задание

Новичок

Создайте программу, которая принимает номер месяца (1 для января, 2 для февраля и т. д.) и выводит время года, к которому он относится. Используйте оператор match для реализации логики.

Времена года и соответствующие им месяцы:

  • Winter: Декабрь (12), Январь (1), Февраль (2)
  • Spring: Март (3), Апрель (4), Май (5)
  • Summer: Июнь (6), Июль (7), Август (8)
  • Autumn: Сентябрь (9), Октябрь (10), Ноябрь (11)

Шпаргалка

Выражение match сравнивает значение с шаблонами и выполняет код в зависимости от того, какой шаблон совпал:

match variable {
    pattern1 => expression1,
    pattern2 => expression2,
    _ => default_expression,
}

Базовый пример:

let day = 3;
let day_name = match day {
    1 => "Monday",
    2 => "Tuesday",
    3 => "Wednesday",
    _ => "Invalid day",
};

Для нескольких строк кода в ветке используйте блок:

let day = 3;
let day_name = match day {
    1 => {
        println!("First day of the week!");
        "Monday"
    },
    2 => "Tuesday",
    _ => "Invalid day",
};

Сопоставление с несколькими шаблонами с помощью |:

let day = 3;
let day_type = match day {
    1 | 2 | 3 | 4 | 5 => "Weekday",
    6 | 7 => "Weekend",
    _ => "Invalid day",
};

Выражения match должны быть исчерпывающими — они должны охватывать все возможные значения. Символ подчеркивания _ является случаем по умолчанию, который соответствует всему, что не совпало с другими шаблонами.

Попробуйте сами

use std::io;

fn main() {
    let mut input = String::new();
    io::stdin().read_line(&mut input).unwrap();
    let month: i32 = input.trim().parse().unwrap();
    // Напишите свой код ниже
    let season = 

    // Не изменяйте строку ниже
    println!("status = {}", season);
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Fundamentals