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

تعبير 'match'

جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 1 من 66.

تعبير match هو أداة مطابقة الأنماط القوية في لغة Rust التي تتيح لك مقارنة قيمة مقابل أنماط مختلفة وتنفيذ الكود بناءً على النمط الذي يتطابق. فكر فيه كنسخة أكثر تقدماً من جمل if التي يمكنها التعامل مع شروط متعددة بشكل أنيق.

إليك الصيغة الأساسية لتعبير match:

match value {
    pattern1 => code_to_run,
    pattern2 => code_to_run,
    _ => default_code,
}

يُسمى كل سطر داخل match بـ "arm". يفصل الرمز => بين النمط والكود الذي يتم تشغيله عندما يتطابق ذلك النمط. تُعد الشرطة السفلية _ نمطاً خاصاً (wildcard) يطابق أي شيء - فهي بمثابة "catch-all" لأي قيمة لا تطابق الأنماط الأخرى.

إليك مثال بسيط يتحقق من رقم:

let number = 2;

match number {
    1 => println!("One"),
    2 => println!("Two"),
    _ => println!("Other"),
}

في لغة Rust، يجب أن تكون تعبيرات match شاملة، مما يعني أنها يجب أن تتعامل مع كل قيمة ممكنة. ولهذا السبب فإن الرمز العام _ مهم للغاية - فهو يضمن تغطية جميع الحالات التي لم يتم مطابقتها بشكل صريح.

challenge icon

التحدي

سهل

اكتب دالة describe_number تأخذ num وتعيد وصفاً نصياً بناءً على قيمة الرقم.

استخدم تعبير match لإعادة أوصاف مختلفة لأرقام مختلفة.

الشروط:

  • إذا كان num هو 0، فقم بإعادة "zero"
  • إذا كان num هو 1، فقم بإعادة "one"
  • إذا كان num هو 2، فقم بإعادة "two"
  • إذا كان num هو 3، فقم بإعادة "three"
  • لأي رقم آخر، قم بإعادة "many"

المعاملات:

  • num (i32): الرقم المراد وصفه

القيمة المرجعة: وصف نصي للرقم (String)

ورقة مرجعية

تعبير match يقارن قيمة مقابل أنماط مختلفة وينفذ الكود بناءً على النمط الذي يتطابق:

match value {
    pattern1 => code_to_run,
    pattern2 => code_to_run,
    _ => default_code,
}

كل سطر داخل match يسمى "ذراع" (arm). يفصل الرمز => بين النمط والكود الذي يتم تشغيله عند مطابقة ذلك النمط.

مثال:

let number = 2;

match number {
    1 => println!("One"),
    2 => println!("Two"),
    _ => println!("Other"),
}

الشرطة السفلية _ هي نمط شامل (wildcard) يطابق أي شيء لم يتم تغطيته بواسطة الأنماط الأخرى. يجب أن تكون تعبيرات match شاملة (exhaustive) - يجب أن تتعامل مع كل قيمة ممكنة.

جرّب بنفسك

fn describe_number(num: i32) -> String {
    // اكتب الكود هنا
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow