0Pricing
Learn Rust Coding · Урок

Модули и mod

Организация кода

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

Зачем нужны модули

По мере роста программ размещать всё в одном файле становится неудобно. Модули позволяют группировать связанный код, управлять тем, что является общедоступным, и избегать конфликтов имён.

Ключевое слово mod объявляет модуль.

Объявление встроенного модуля

Модуль можно определить прямо внутри файла с помощью mod name { ... }. Всё, что находится между фигурными скобками, принадлежит этому модулю.

mod greetings {
    fn hello() {
        println!("hello from the module");
    }
}

fn main() {
    println!("module declared above");
}

Вызов функций модуля

Элементы внутри модуля по умолчанию являются закрытыми. Чтобы вызвать элемент извне, он должен быть помечен как pub, а обращаться к нему нужно по пути модуля с помощью ::.

mod greetings {
    pub fn hello() {
        println!("hello!");
    }
}

fn main() {
    greetings::hello();
}

Вложенные модули

Модули могут содержать другие модули, образуя дерево. В пути перечисляются все уровни, разделённые ::.

mod app {
    pub mod ui {
        pub fn draw() {
            println!("drawing ui");
        }
    }
}

fn main() {
    app::ui::draw();
}

Модули объединяют не только функции

Модуль может содержать функции, структуры, перечисления, константы и даже другие модули. Это позволяет хранить связанные типы и поведение вместе.

mod shapes {
    pub struct Circle {
        pub radius: f64,
    }
    pub const PI: f64 = 3.14159;
}

fn main() {
    let c = shapes::Circle { radius: 2.0 };
    println!("area = {}", shapes::PI * c.radius * c.radius);
}

Дерево модулей

У каждого пакета есть корневой модуль. Объявленные вами модули образуют под ним дерево. Пути описывают расположение элемента, подобно папкам в файловой системе.

super: родительский модуль

Внутри модуля super обозначает родительский модуль. Это позволяет дочернему модулю вызывать элемент, определённый на уровень выше.

fn top_level() {
    println!("called via super");
}

mod inner {
    pub fn run() {
        super::top_level();
    }
}

fn main() {
    inner::run();
}

self: текущий модуль

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

mod tools {
    pub fn helper() {
        println!("helper running");
    }
    pub fn run() {
        self::helper();
    }
}

fn main() {
    tools::run();
}

Модули в отдельных файлах

Помимо встроенных модулей, запись mod network; (с точкой с запятой и без тела) указывает Rust загрузить содержимое из network.rs или network/mod.rs.

Так реальные проекты разделяют код по файлам, сохраняя единое дерево модулей.

Границы видимости

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

Такая инкапсуляция скрывает внутренние детали.

mod bank {
    fn secret() -> i32 { 42 }
    pub fn reveal() -> i32 { secret() }
}

fn main() {
    println!("{}", bank::reveal());
}

Организация реальных проектов

Используйте модули в соответствии с предметной областью: auth, db, handlers. Делайте каждый модуль целенаправленным, открывайте небольшую общедоступную часть, а остальное скрывайте.

Чёткие границы модулей облегчают навигацию по большим кодовым базам.

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

Проверьте свои знания модулей.

Итоги

Вы научились организовывать код с помощью модулей:

  • mod name { ... } объявляет встроенный модуль
  • Элементы по умолчанию являются закрытыми; используйте pub, чтобы открыть к ним доступ
  • Пути используют :: для перемещения по дереву модулей
  • super, self и mod name; позволяют перемещаться по модулям и разделять их

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

Урок «Модули и mod» бесплатный?

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

Чему я научусь в уроке «Модули и mod»?

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

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

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

Сколько времени занимает урок «Модули и mod»?

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

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

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

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

  1. Модули и mod
  2. pub и видимость
  3. use и пути
  4. Крейты и корень крейта
← Назад к Learn Rust Coding