الماكروهات

الماكروز (Macros) يتم توسيعها إلى كود Rust أثناء الترجمة، ويمكن أن تأخذ عددًا متغيرًا من المعلمات (arguments). يتم تمييزها بعلامة ! في النهاية. تتضمن مكتبة Rust القياسية مجموعة من الماكروز المفيدة.

  • println!(format, ..) تطبع سطرًا إلى الإخراج القياسي (standard output)، وتطبق التنسيق (formatting) الموضح في std::fmt.
  • format!(format, ..) تعمل تمامًا مثل println! ولكنها تعيد النتيجة كسلسلة نصية (string).
  • dbg!(expression) يسجل قيمة التعبير (expression) ويعيدها.
  • todo!() تشير إلى جزء من الكود على أنه لم يتم تنفيذه بعد (not-yet-implemented). إذا تم تنفيذه، سيتسبب في (panic).
  • unreachable!() تشير إلى جزء من الكود على أنه غير قابل للوصول (unreachable). إذا تم تنفيذه، سيتسبب في (panic).
fn factorial(n: u32) -> u32 {
    let mut product = 1;
    for i in 1..=n {
        product *= dbg!(i);
    }
    product
}

fn fizzbuzz(n: u32) -> u32 {
    todo!()
}

fn main() {
    let n = 4;
    println!("{n}! = {}", factorial(n));
}
This slide should take about 2 minutes.

الخلاصة من هذا القسم هي أن هذه التسهيلات الشائعة موجودة، وكيفية استخدامها. لماذا تم تعريفها كـ macros، وما الذي تتوسع إليه، ليس بالأمر الحاسم بشكل خاص.

الدورة لا تغطي تعريف الماكروز (macros)، ولكن قسم لاحق سيصف استخدام الماكروز المشتقة (derive macros).