Модули и 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 — локальная установка не требуется.
Все уроки этого курса
- Модули и mod
- pub и видимость
- use и пути
- Крейты и корень крейта