0Pricing
Learn Rust Coding · Урок

Деструктуризация

Структуры, перечисления и кортежи

«Деструктуризация» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Подробно о match
  2. if let и while let
  3. Связывание с помощью @
  4. Деструктуризация
← Назад к Learn Rust Coding