ماژول‌ها و مدیریت پروژه در Rust

ایجاد شده توسط دکتر مصطفی جلیلی در آموزش برنامه نویسی Rust 11 ژوئن 2025
اشتراک گذاری

ماژول‌ها و مدیریت پروژه در Rust 


یکی از نقاط قوت Rust، ساختاردهی منظم و ماژولار کدهاست. در این بخش با مفاهیم ماژول‌ها، سطح دسترسی (pub/private)، فایل Cargo.toml، crates، و نحوه‌ی وارد کردن کدها با use آشنا می‌شویم؛ مهارت‌هایی حیاتی برای ساخت پروژه‌های بزرگ و سازمان‌یافته در Rust.


ایجاد و استفاده از ماژول‌ها (Modules)


در Rust، ماژول‌ها ابزار اصلی برای سازماندهی کد هستند. هر ماژول می‌تواند شامل توابع، ساختارها، enumها، و سایر ماژول‌ها باشد.


تعریف ماژول درون یک فایل:


mod greetings {
pub fn say_hello() {
println!("سلام!");
}
}
fn main() {
greetings::say_hello();
}



    - با استفاده از mod ماژول تعریف می‌شود.



      - دسترسی به محتوای آن با نام_ماژول::نام_تابع انجام می‌شود.

      تقسیم ماژول به فایل جداگانه:


      فایل‌ها خودشان به عنوان ماژول شناخته می‌شوند.


      src/
      ├── main.rs
      └── greetings.rs

      در main.rs:


      mod greetings;
      fn main() {
      greetings::say_hello();
      }

      در greetings.rs:


      pub fn say_hello() {
      println!("درود از فایل دیگر!");
      }

      سطح دسترسی: pub و private


      در Rust، تمامی اعضای ماژول به‌صورت پیش‌فرض private هستند.


      pub:


      اگر بخواهیم تابع یا ساختاری از خارج ماژول قابل استفاده باشد، باید آن را pub کنیم:


      mod math {
      pub fn sum(a: i32, b: i32) -> i32 {
      a + b
      }
      }

      private (پیش‌فرض):


      بدون pub، دسترسی از خارج ماژول به اعضا ممنوع است و در زمان کامپایل خطا می‌گیریم.


      مدیریت پروژه با Crates و Cargo.toml


      crate چیست؟


      هر پروژه‌ی Rust یک crate محسوب می‌شود — یعنی یک واحد کامپایل مستقل.

      - اگر main.rs داشته باشد، یک crate اجرایی است.

      - اگر lib.rs داشته باشد، یک crate کتابخانه‌ای است.


      فایل Cargo.toml:


      مرکز تنظیمات پروژه Rust شماست.


      [package]
      name = "my_project"
      version = "0.1.0"
      edition = "2021"
      [dependencies]
      rand = "0.8"



        - بخش [dependencies] برای اضافه کردن کتابخانه‌های دیگر (crates).

        - با cargo build یا cargo run این وابستگی‌ها نصب و استفاده می‌شوند.


        افزودن crate خارجی:


        مثلاً برای استفاده از کتابخانه‌ی rand:

        1 - اضافه به Cargo.toml:

        2 - rand = "0.8"

        3 - استفاده در کد:


        1. use rand::Rng
          fn main() {
          let num = rand::thread_rng().gen_range(1..10);
          println!("عدد تصادفی: {}", num);
          }



        import/export و استفاده از use


        برای استفاده راحت‌تر از توابع یا ساختارهای ماژول‌ها، می‌توانیم از دستور use استفاده کنیم.


        بدون use:


        math::sum(1, 2);

        با use:


        use math::sum;
        sum(1, 2);

        همچنین می‌توانیم از as برای تغییر نام یا از * برای وارد کردن همه‌چیز استفاده کنیم (توصیه نمی‌شود):


        use math::sum as add;

        در پروژه‌های بزرگ، ساختار درختی ماژول‌ها بسیار معمول است:


        src/
        ├── main.rs
        └── utils/
        ├── mod.rs
        └── math.rs

        در این ساختار:

        - utils/mod.rs به عنوان ماژول utils عمل می‌کند.

        - داخل mod.rs: mod math;

        - در main.rs: mod utils; use utils::math::sum;


        جمع‌بندی


        در این بخش یاد گرفتیم:

        - چگونه ماژول‌ها را تعریف و از آن‌ها در فایل‌های جداگانه استفاده کنیم.

        - تفاوت بین سطح دسترسی‌های pub و private.

        - چگونه با استفاده از Crates و فایل Cargo.toml پروژه را مدیریت و از کتابخانه‌ها استفاده کنیم.

        - و چگونه با use و ساختاردهی صحیح، کدها را خواناتر و قابل‌مدیریت‌تر کنیم.


        در بخش بعدی، وارد دنیای Traits و Genericها خواهیم شد که بخش مهمی از برنامه‌نویسی پیشرفته در Rust هستند.

        نظرات (0)

        اشتراک گذاری

        این پست را با دیگران به اشتراک بگذارید

        تنظیمات GDPR

        When you visit any of our websites, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and manage your preferences. Please note, that blocking some types of cookies may impact your experience of the site and the services we are able to offer.