match
مطابقة الأنماط match
match يقارن قيمة بمجموعة أنماط ويشغّل الفرع المطابق، ويجبرك المترجم على تغطية كل الاحتمالات الممكنة.
match هو أداة التحكّم بالتدفّق الأساسية للتعامل مع enum وOption وResult في Rust. أهم ما يميّزها عن switch باللغات الأخرى: **الشمولية الإلزامية** — إن لم تُغطَّ كل الحالات الممكنة، يرفض المترجم البناء، ما يمنع فئة كاملة من الأخطاء المرتبطة بحالة منسيّة.
يمكن تعزيز الأنماط بحراس (match guards) بشرط if إضافي، أو بربط جزء من القيمة باسم عبر @، أو بتفكيك هياكل وصفوف مباشرة داخل النمط.
الصياغة
match value {
pattern1 => expr,
pattern2 if condition => expr,
_ => expr,
}📄 مثال
let n = 7;
match n {
0 => println!("صفر"),
x if x % 2 == 0 => println!("{x} زوجي"),
1..=9 => println!("رقم صغير"),
_ => println!("غير ذلك"),
}أهم النقاط
| العنصر | الوظيفة |
|---|---|
| pattern => expr | فرع عادي يُنفَّذ عند تطابق النمط |
| pattern if cond | حارس مطابقة (match guard) — شرط إضافي بعد النمط |
| 1..=5 | مطابقة نطاق شامل الطرفين (أعداد وحروف) |
| _ | نمط شامل يلتقط أي قيمة متبقية، غالبًا الفرع الأخير |
💡 نصائح عملية
- اترك فرع _ في النهاية عند التعامل مع أنواع مفتوحة (مثل الأعداد) لتضمن الشمولية بسهولة
- استخدم if let بدل match عندما تهتم بحالة واحدة فقط وتريد تجاهل الباقي
⚠️ أخطاء شائعة
- نسيان أن حراس match (if condition) لا تُحسب ضمن فحص الشمولية — قد تحتاج فرعًا احتياطيًا رغم وجود الحارس
- ترتيب الأنماط بشكل يجعل نمطًا عامًا يسبق نمطًا أدق فيصبح غير قابل للوصول
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار RUST الكامل بالعربي.