Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الكلمة المفتاحية Public

جزء من قسم البرمجة كائنية التوجه في رحلة Rust على Coddy. الدرس 9 من 61.

في الدرس السابق، تعلّمتَ كيفية تنظيم الشيفرة في ملفات وحدات منفصلة. ومع ذلك، إذا حاولتَ استخدام البنية Player من main.rs، فستواجه خطأً في المصرّف. وذلك لأن كل شيء في وحدة Rust يكون خاصًا افتراضيًا.

لجعل العناصر متاحة من خارج الوحدة الخاصة بها، يجب أن تضع عليها صراحةً الكلمة المفتاحية pub:

// player.rs
pub struct Player {
    pub name: String,
    pub score: u32,
}

impl Player {
    pub fn new(name: String) -> Player {
        Player { name, score: 0 }
    }
}

لاحظ كيف تظهر pub في مواضع متعددة: على بنية struct نفسها، وعلى كل حقل، وعلى الأسلوب. يحتاج كل عنصر إلى إعلان رؤية خاص به.

من دون pub على struct، لا تستطيع الملفات الأخرى حتى تسمية النوع. ومن دون pub على fields، لا يمكنها الوصول إلى البيانات مباشرةً. ومن دون pub على الأساليب، لا يمكنها استدعاؤها.

الآن في main.rs، يمكنك استخدام العناصر العامة للوحدة:

// main.rs
mod player;

use player::Player;

fn main() {
    let p = Player::new(String::from("Alice"));
    println!("{}", p.name);
}

تُدخل عبارة use العنصر Player إلى النطاق، لذلك لا يتعين عليك كتابة player::Player في كل مرة. هذا النهج الذي يضع الخصوصية افتراضيًا مقصود. فهو يشجعك على التفكير بعناية في الأجزاء من شفرتك التي ينبغي كشفها للعالم الخارجي.

challenge icon

التحدي

سهل

لنَبْنِ كتالوجًا بسيطًا للمنتجات من خلال تنظيم التعليمات البرمجية في ملفين وجعل العناصر المناسبة عامة، حتى يمكن استخدامها من برنامجك الرئيسي.

ستنشئ ملفين:

  • product.rs: Define بنية Product مع two fields: name (String) وprice (f64). أضف associated function called new تأخذ اسمًا وسعرًا وتُرجع Product جديدة. Remember تعليم البنية، وits fields، والطريقة على أنها public حتى يمكن الوصول إليها من خارج الوحدة.
  • main.rs: Declare وحدة product، وأحضر Product إلى scope باستخدام use statement، ثم أنشئ منتجًا واطبع details الخاصة به.

فكّر بعناية في المواضع التي تحتاج فيها إلى الكلمة المفتاحية pub: يجب أن تكون البنية نفسها مرئية، ويجب أن تكون الحقول قابلة للوصول للقراءة، كما يجب أن تكون طريقة المُنشئ قابلة للاستدعاء من main.rs.

يجب أن يتبع إخراجك format الدقيق التالي:

Product: {name}, Price: ${price}

على سبيل المثال، إذا أنشأت منتجًا بالاسم "Laptop" والسعر 999.99، فسيكون الإخراج:

Product: Laptop, Price: $999.99

ستتلقى مدخلين: اسم المنتج وprice.

REQUIRED OUTPUT FORMAT: [Your translated content here]

جرّب بنفسك

// أعلن وحدة product
mod product;

// TODO: أدخل Product في النطاق باستخدام عبارة use

fn main() {
    // اقرأ المدخلات
    let mut name = String::new();
    std::io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    let mut price_input = String::new();
    std::io::stdin().read_line(&mut price_input).expect("Failed to read line");
    let price: f64 = price_input.trim().parse().expect("Failed to parse price");
    
    // TODO: أنشئ Product جديد باستخدام الدالة Product::new
    
    // TODO: اطبع تفاصيل المنتج بالتنسيق:
    // Product: {name}, Price: ${price}
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم Rust عبر الإنترنت