পাঠ ৭.৫

Module-গুলোকে আলাদা file-এ ভাগ করা

Separating Modules into Different Files

Module বড় হলে এক file-এ সব রাখা inconvenient। Rust সহজ convention দেয় — module-কে আলাদা file-এ সরানো। এই পাঠে restaurant example-এর module-গুলোকে file-এ split করব।

Step 1 — front_of_house আলাদা করা

src/lib.rs-এ module body-র জায়গায় শুধু declaration:

src/lib.rsrust
mod front_of_house;

pub use crate::front_of_house::hosting;

pub fn eat_at_restaurant() {
    hosting::add_to_waitlist();
}

নতুন file src/front_of_house.rs বানিয়ে module body সেখানে:

src/front_of_house.rsrust
pub mod hosting {
    pub fn add_to_waitlist() {}
}

Compiler crate root-এ mod front_of_house; declaration দেখে — তারপর src/front_of_house.rs-এ body খুঁজে পায়।

Step 2 — hosting submodule আলাদা

hosting front_of_house-এর child। তাই এর file parent-এর নামের একটা directory-এ থাকতে হবে।

src/front_of_house.rs-এ শুধু declaration:

src/front_of_house.rsrust
pub mod hosting;

নতুন file src/front_of_house/hosting.rs:

src/front_of_house/hosting.rsrust
pub fn add_to_waitlist() {}

সবমিলিয়ে directory structure:

restaurant
├── Cargo.toml
└── src
    ├── front_of_house
    │   └── hosting.rs
    ├── front_of_house.rs
    └── lib.rs

গুরুত্বপূর্ণ — mod কোনো include না

mod declare করে — module-কে module tree-তে add করে। C-এর #include-এর মতো repeated inclusion না। একই module-কে module tree-তে একবারই declare করতে হয়; বাকি জায়গা থেকে path দিয়ে refer করা হয়।

এই কারণে — src/lib.rs-এর pub use crate::front_of_house::hosting file split করার পরও বদলায়নি। use compile হওয়া file-এ কোনো প্রভাব ফেলে না — শুধু shortcut বানায়।

পুরোনো style — mod.rs

Rust দুটো convention support করে:

front_of_house-এর জন্য:

  • src/front_of_house.rs — modern, preferred।
  • src/front_of_house/mod.rs — older, still supported।

hosting-এর জন্য:

  • src/front_of_house/hosting.rs — modern, preferred।
  • src/front_of_house/hosting/mod.rs — older, still supported।

একই module-এর জন্য দুই style একসাথে use করলে compile error। Modern style preferred — editor-এ একই নামের অনেক mod.rs file খোলা থাকা confusing।

এই পাঠ থেকে যা শিখলে

  • mod name; declaration — body name.rs-এ বা name/mod.rs-এ।
  • Submodule — parent-এর folder-এর ভিতরে file (যেমন front_of_house/hosting.rs)।
  • mod include না — declaration একবারই, refer path দিয়ে।
  • Modern style (name.rs) preferred, mod.rs legacy কিন্তু supported।