Dev Study
← 解説「mod — コードを名前空間で分ける」に戻る

サンプルコードで身につける: mod — コードを名前空間で分ける

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1最小のモジュール — 関数をひとまとめにする

mod ブロックで関連する関数を1つの名前空間にまとめる、いちばん素朴な例です。中の関数は math::double のように「モジュール名::関数名」のパスで呼び出します。計算ロジックの置き場所に名前を付けるだけでも、コードのどこに何があるかが格段に追いやすくなります。

Rust

2別モジュールなら同名の関数を持てる

モジュールが名前の衝突を防ぐ仕切りになることを示す例です。japanese と english の両方に greet という関数がありますが、パスが違うので問題なく共存できます。実務でも「同じ操作の別実装」をモジュール名で区別する場面は頻繁にあります。

Rust

3モジュールの入れ子で階層を作る

mod の中にさらに mod を書いて、階層構造を作る例です。呼び出すときは app::ui::render のようにパスを :: でつないでたどります。実務のプロジェクトでは「アプリ全体 → 機能 → 細かい部品」という階層をこの入れ子(と、それをファイルに分けた形)で表現します。

Rust

4モジュール内どうしは修飾なしで呼べる

同じモジュールの中なら、report:: を付けずに関数を直接呼べることを示す例です。外から呼ぶときだけパスで修飾する、という内と外の違いがモジュールの本質です。集計の部品(average)と、それを組み立てた窓口(print_summary)を同じモジュールに置く構成は実務でも定番です。

Rust

5設定モジュールと起動処理の分割

「設定値を返す config」と「起動メッセージを出す startup」という関心の違いをモジュール分割で表した、実務寄りの例です。設定の取得元をあとでファイル読み込みに変えても、config の中だけ直せば済みます。main が各モジュールをつなぐ司令塔になる構成は、実際のアプリケーションの縮図です。

Rust