Создание первого перечисления
Создайте простые перечисляемые типы.
«Создание первого перечисления» — бесплатный урок Learn Rust Coding на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn Rust Coding, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn Rust Coding содержит 4 уроков всего.
What Is an Enum?
Enum (перечисление) позволяет определить тип путем перечисления его возможных значений, называемых вариантами. Значение этого типа всегда может быть только одним из этих вариантов.
Enums особенно полезны, когда у объекта есть фиксированный набор состояний, например, стороны света или масти в колоде карт.
enum Direction {
North,
South,
East,
West,
}Объявление перечисления
Перечисление объявляется с помощью ключевого слова enum, имени и разделённого запятыми списка вариантов внутри фигурных скобок.
По соглашению имена перечислений записываются в PascalCase (например, Direction), как и имена вариантов (например, North).
enum TrafficLight {
Red,
Yellow,
Green,
}Создание значения перечисления
Чтобы создать значение, напишите имя перечисления, два двоеточия ::, а затем вариант.
Например, Direction::North создаёт значение типа Direction. Последовательность :: сообщает Rust, к какому перечислению относится вариант.
enum Direction {
North,
South,
East,
West,
}
fn main() {
let heading = Direction::East;
println!("Created a direction value!");
}Перечисления — это типы
После определения перечисление становится полноценным типом, таким же, как i32 или bool. Его значения можно хранить в переменных и передавать функциям.
Функция, принимающая Direction, примет любой из его вариантов, но ничего другого.
enum Direction {
North,
South,
}
fn describe(d: Direction) {
println!("Got a direction");
}
fn main() {
describe(Direction::North);
}Почему бы просто не использовать числа?
Можно представить светофор с помощью 0, 1 и 2, но ничто не помешает случайно использовать 7.
Перечисление делает недопустимые состояния невозможными: компилятор гарантирует, что значение всегда является одним из перечисленных вариантов. Это безопаснее и намного понятнее.
Вывод с помощью Debug
По умолчанию Rust не знает, как выводить перечисление. Добавьте #[derive(Debug)] перед перечислением, чтобы выводить его с помощью форматировщика {:?}.
Это отлично подходит для быстрой отладки во время обучения.
#[derive(Debug)]
enum Direction {
North,
South,
}
fn main() {
let d = Direction::South;
println!("{:?}", d);
}Сравнение значений перечисления
Добавьте #[derive(PartialEq)], чтобы сравнивать варианты с помощью ==.
Это удобно для простых проверок, однако для более сложного поведения обычно лучше подходит выражение match (с ним Вы скоро познакомитесь).
#[derive(PartialEq)]
enum Light {
Red,
Green,
}
fn main() {
let l = Light::Red;
if l == Light::Red {
println!("Stop!");
}
}Сколько угодно вариантов
Перечисление может содержать столько вариантов, сколько Вам нужно. Все они являются частью одного типа.
Объединение связанных состояний помогает поддерживать порядок в коде и сразу показывает возможные варианты.
enum Suit {
Hearts,
Diamonds,
Clubs,
Spades,
}Перечисления в стандартной библиотеке
Стандартная библиотека Rust повсеместно использует перечисления. Два известных примера — Option (значение, которое может присутствовать или отсутствовать) и Result (успешное выполнение или ошибка).
Изучение перечислений сейчас подготовит Вас к пониманию этих базовых типов в дальнейшем.
// Option is an enum in std:
// enum Option<T> {
// Some(T),
// None,
// }Копирование простых перечислений
Для перечислений, варианты которых не содержат данных, можно вывести Clone и Copy. Тогда значения будут автоматически копироваться, а не перемещаться.
Благодаря этому небольшие перечисления состояний ведут себя как простые значения, например целые числа.
#[derive(Clone, Copy)]
enum Coin {
Heads,
Tails,
}
fn main() {
let a = Coin::Heads;
let b = a; // a is still usable
}Объединяем всё вместе
Вот полная программа: определите перечисление, создайте значение и выведите его с помощью Debug.
Запустите программу и попробуйте заменить Green на другой вариант, чтобы увидеть изменение вывода.
#[derive(Debug)]
enum TrafficLight {
Red,
Yellow,
Green,
}
fn main() {
let current = TrafficLight::Green;
println!("Light is {:?}", current);
}Быстрая проверка
Проверьте, насколько хорошо Вы поняли основы перечислений.
Итоги
Вы узнали, что перечисление определяет тип из фиксированного списка вариантов, объявляемого с помощью ключевого слова enum.
Значения создаются с помощью EnumName::Variant. Также можно вывести Debug, PartialEq или Copy, чтобы выводить, сравнивать и копировать значения. Далее Вы научитесь реагировать на каждый вариант с помощью match.
Часто задаваемые вопросы
Урок «Создание первого перечисления» бесплатный?
Да — полный текст урока «Создание первого перечисления» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn Rust Coding, подпишись на CoddyKit PRO. Курс Learn Rust Coding содержит 4 уроков всего.
Чему я научусь в уроке «Создание первого перечисления»?
Создайте простые перечисляемые типы. Ты практикуешь Learn Rust Coding с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn Rust Coding?
Предыдущий опыт не требуется. Learn Rust Coding на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Создание первого перечисления»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn Rust Coding?
Да. Каждый урок Learn Rust Coding включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание первого перечисления
- Сопоставление вариантов перечисления
- Перечисления с данными
- Защитные условия и привязки в match