0Pricing
Learn Rust Coding · Урок

Замыкания

Анонимные функции

«Замыкания» — бесплатный урок Learn Rust Coding на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn Rust Coding, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn Rust Coding содержит 4 уроков всего.

Что такое замыкание

Замыкание — это анонимная функция, которую можно сохранить в переменной и вызвать позже. Она записывается с вертикальными чертами вокруг параметров.

fn main() {
    let add_one = |x| x + 1;
    println!("{}", add_one(4));
}

Синтаксис замыканий

Параметры записываются между |...|, за ними следует тело. Если тело состоит из одного выражения, фигурные скобки не нужны.

  • |x| x + 1 — один параметр.
  • |a, b| a + b — два параметра.
fn main() {
    let multiply = |a, b| a * b;
    println!("{}", multiply(3, 5));
}

Многострочные замыкания

Если нужно выполнить несколько инструкций, заключите тело в фигурные скобки, как у функции.

fn main() {
    let describe = |n: i32| {
        let doubled = n * 2;
        println!("{} doubled is {}", n, doubled);
    };
    describe(7);
}

Захват окружения

В отличие от обычной функции, замыкание может захватывать переменные из окружающей области видимости и использовать их внутри.

fn main() {
    let factor = 10;
    let scale = |x| x * factor;
    println!("{}", scale(5));
}

Вывод типов в замыканиях

Замыкания обычно выводят типы параметров и возвращаемого значения по способу их использования, поэтому аннотации необязательны.

При необходимости можно добавить типы для ясности.

fn main() {
    let greet = |name: &str| -> String {
        format!("Hello, {}!", name)
    };
    println!("{}", greet("Rust"));
}

Замыкания как аргументы

Многие стандартные методы принимают замыкание. Например, map применяет замыкание к каждому элементу.

fn main() {
    let nums = vec![1, 2, 3];
    let doubled: Vec<i32> = nums.iter().map(|x| x * 2).collect();
    println!("{:?}", doubled);
}

Фильтрация с помощью замыканий

Метод filter оставляет только те элементы, для которых замыкание возвращает значение true.

fn main() {
    let nums = vec![1, 2, 3, 4, 5, 6];
    let evens: Vec<i32> = nums.into_iter().filter(|x| x % 2 == 0).collect();
    println!("{:?}", evens);
}

Сохранение замыканий

У замыканий уникальные анонимные типы, но их можно сохранить в переменной и использовать повторно.

fn main() {
    let is_even = |n: i32| n % 2 == 0;
    println!("{} {}", is_even(4), is_even(7));
}

Замыкания и функции

Различия:

  • Функции не могут захватывать окружающие переменные, а замыкания могут.
  • Замыкания анонимны и часто имеют небольшой размер.
  • Типы замыканий обычно выводятся автоматически.
fn main() {
    let base = 100;
    let bonus = |earned: i32| earned + base;
    println!("{}", bonus(25));
}

Возврат вычисленных значений

Объединяйте замыкания с итераторами, чтобы получать результаты с помощью понятной и выразительной цепочки операций.

fn main() {
    let nums = vec![10, 20, 30];
    let total: i32 = nums.iter().map(|x| x + 1).sum();
    println!("total {}", total);
}

Замыкания захватывают по ссылке

По умолчанию замыкание заимствует захваченные переменные. После этого их всё ещё можно читать за пределами замыкания, если они только заимствованы.

fn main() {
    let name = String::from("Ada");
    let printer = || println!("Name: {}", name);
    printer();
    println!("still usable: {}", name);
}

Быстрая проверка

Вспомните одну из ключевых возможностей замыканий.

Повторение

Замыкания в Rust:

  • Анонимные функции, записываемые как |params| body.
  • Могут захватывать переменные из своего окружения.
  • Их типы обычно выводятся автоматически.
  • Широко используются с методами итераторов, такими как map и filter.
fn main() {
    let tax = 0.2;
    let with_tax = |price: f64| price * (1.0 + tax);
    println!("{}", with_tax(50.0));
}

Часто задаваемые вопросы

Урок «Замыкания» бесплатный?

Да — полный текст урока «Замыкания» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn Rust Coding, подпишись на CoddyKit PRO. Курс Learn Rust Coding содержит 4 уроков всего.

Чему я научусь в уроке «Замыкания»?

Анонимные функции Ты практикуешь Learn Rust Coding с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn Rust Coding?

Предыдущий опыт не требуется. Learn Rust Coding на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Замыкания»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn Rust Coding?

Да. Каждый урок Learn Rust Coding включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

  1. Определение функций
  2. Выражения и инструкции
  3. Замыкания
  4. Fn, FnMut, FnOnce
← Назад к Learn Rust Coding