モジュールとmod
コードを整理します
「モジュールとmod」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。
モジュールとは何か
プログラムが大きくなると、すべてを1つのファイルに置くのは扱いにくくなります。モジュールを使うと、関連するコードをまとめ、公開範囲を制御し、名前の衝突を避けられます。
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は親モジュールを指します。子モジュールから、1つ上の階層で定義されたものを呼び出せます。
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時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。
「モジュールとmod」で何を学びますか?
コードを整理します ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn Rust Codingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「モジュールとmod」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn Rust Codingレッスンでコードを書いて実行できますか?
はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- モジュールとmod
- pubと可視性
- useとパス
- クレートとクレートルート