Деструктуризация
Структуры, перечисления и кортежи
«Деструктуризация» — бесплатный урок Learn Rust Coding на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn Rust Coding, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn Rust Coding содержит 4 уроков всего.
Что такое деструктуризация?
Деструктуризация разбирает составное значение на части с помощью образца. Она работает с кортежами, структурами, перечислениями, массивами и другими типами.
Деструктуризация кортежей
Свяжите каждый элемент кортежа с отдельной переменной в одной конструкции let.
fn main() {
let point = (3, 7);
let (x, y) = point;
println!("x = {x}, y = {y}");
}Игнорирование частей кортежа
Используйте _, чтобы пропустить одно значение, а .. — чтобы пропустить несколько.
fn main() {
let data = (1, 2, 3, 4);
let (first, .., last) = data;
println!("{first} ... {last}");
}Деструктуризация структур
Извлекайте поля структуры по имени. Имена связанных переменных могут совпадать с именами полей или отличаться от них.
struct Point {
x: i32,
y: i32,
}
fn main() {
let p = Point { x: 10, y: 20 };
let Point { x, y } = p;
println!("{x}, {y}");
}Переименование полей
Используйте field: new_name, чтобы связать поле структуры с другим именем переменной.
struct Config {
width: u32,
height: u32,
}
fn main() {
let c = Config { width: 800, height: 600 };
let Config { width: w, height: h } = c;
println!("{w} x {h}");
}Игнорирование полей структуры
.. игнорирует остальные поля, которые Вам не нужны.
struct User {
name: String,
age: u32,
active: bool,
}
fn main() {
let u = User { name: "Ada".into(), age: 36, active: true };
let User { name, .. } = u;
println!("{name}");
}Деструктуризация перечислений
В конструкции match выполняйте деструктуризацию вариантов перечисления, чтобы извлечь их данные.
enum Event {
Click { x: i32, y: i32 },
Key(char),
}
fn main() {
let e = Event::Click { x: 5, y: 8 };
match e {
Event::Click { x, y } => println!("click at {x},{y}"),
Event::Key(c) => println!("key {c}"),
}
}Деструктуризация в параметрах
Параметры функций можно деструктурировать напрямую, что удобно для кортежей и небольших структур.
fn distance((x1, y1): (f64, f64), (x2, y2): (f64, f64)) -> f64 {
((x2 - x1).powi(2) + (y2 - y1).powi(2)).sqrt()
}
fn main() {
println!("{}", distance((0.0, 0.0), (3.0, 4.0)));
}Вложенная деструктуризация
Шаблоны можно свободно вкладывать, поэтому за один шаг можно обратиться к глубоко вложенным структурам.
struct Line {
start: (i32, i32),
end: (i32, i32),
}
fn main() {
let line = Line { start: (0, 0), end: (4, 5) };
let Line { start: (sx, sy), end: (ex, ey) } = line;
println!("from {sx},{sy} to {ex},{ey}");
}Деструктуризация массивов и срезов
Массивы и срезы можно деструктурировать, в том числе захватывая середину с помощью ...
fn main() {
let arr = [1, 2, 3, 4, 5];
let [first, .., last] = arr;
println!("first {first}, last {last}");
}Деструктуризация в циклах for
Деструктуризация работает и в циклах for, что особенно удобно для перебора пар значений.
fn main() {
let pairs = [("a", 1), ("b", 2), ("c", 3)];
for (label, value) in pairs {
println!("{label} = {value}");
}
}Быстрая проверка
Как при деструктуризации игнорировать остальные поля структуры?
Итоги
Вы изучили деструктуризацию:
- Разбиение кортежей, структур, перечислений, массивов и срезов
- Переименование полей с помощью
field: name - Игнорирование частей с помощью
_и.. - Деструктуризация в
let,matchи параметрах функций - Вложение шаблонов для извлечения глубоко вложенных данных
Часто задаваемые вопросы
Урок «Деструктуризация» бесплатный?
Да — полный текст урока «Деструктуризация» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn Rust Coding, подпишись на CoddyKit PRO. Курс Learn Rust Coding содержит 4 уроков всего.
Чему я научусь в уроке «Деструктуризация»?
Структуры, перечисления и кортежи Ты практикуешь Learn Rust Coding с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn Rust Coding?
Предыдущий опыт не требуется. Learn Rust Coding на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Деструктуризация»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn Rust Coding?
Да. Каждый урок Learn Rust Coding включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Подробно о match
- if let и while let
- Связывание с помощью @
- Деструктуризация