تعبير 'match'
جزء من قسم المنطق وتدفّق التنفيذ في رحلة Rust على Coddy. الدرس 1 من 66.
تعبير match هو أداة قوية لمطابقة الأنماط في Rust، تتيح لك مقارنة قيمة بأنماط مختلفة وتنفيذ التعليمات البرمجية بناءً على النمط المطابق. فكّر فيه على أنه إصدار أكثر تطورًا من عبارات if، ويمكنه التعامل مع شروط متعددة بأناقة.
إليك الصياغة الأساسية لتعبير match:
match value {
pattern1 => code_to_run,
pattern2 => code_to_run,
_ => default_code,
}يُسمّى كل سطر داخل match «ذراعًا». يفصل => النمط عن الشيفرة التي تُنفَّذ عندما يطابق ذلك النمط. الشرطة السفلية _ هي نمط شامل خاص يطابق أي شيء، فهي أشبه بنمط «يلتقط الكل» لأي قيمة لا تطابق الأنماط الأخرى.
إليك مثالًا بسيطًا يتحقق من رقم:
let number = 2;
match number {
1 => println!("One"),
2 => println!("Two"),
_ => println!("Other"),
}في Rust، يجب أن تكون تعبيرات match شاملة، أي يجب أن تتعامل مع كل قيمة ممكنة. لهذا السبب يُعدّ رمز البدل _ مهمًا جدًا؛ فهو يضمن أنك غطّيت جميع الحالات التي لم تُطابق صراحةً.
match تعبير، لذا يمكنه أيضًا إنتاج قيمة. عندما يكون آخر تعبير في دالة، تكون قيمة الذراع المطابقة هي ما تُعيده الدالة:
fn day_name(day: i32) -> String {
match day {
1 => String::from("Monday"),
2 => String::from("Tuesday"),
_ => String::from("Another day"),
}
}بما أن هذه الدالة تُعيد قيمة من النوع String، فإن كل ذراع يحوّل نصه (من النوع &str) إلى String باستخدام String::from أو .to_string().
التحدي
سهلاكتب دالة describe_number تأخذ num وتعيد وصفاً نصياً بناءً على قيمة الرقم.
استخدم تعبير match لإعادة أوصاف مختلفة لأرقام مختلفة.
الشروط:
- إذا كان
numهو0، فقم بإعادة"zero" - إذا كان
numهو1، فقم بإعادة"one" - إذا كان
numهو2، فقم بإعادة"two" - إذا كان
numهو3، فقم بإعادة"three" - لأي رقم آخر، قم بإعادة
"many"
المعاملات:
num(i32): الرقم المراد وصفه
القيمة المرجعة: وصف نصي للرقم (String)
جرّب بنفسك
fn describe_number(num: i32) -> String {
// اكتب الشيفرة هنا
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفّق التنفيذ
1تدفق التحكم المتقدم
تعبير 'match'مطابقة قيم متعددةمطابقة النطاقاتتعبير 'if let'الحلقات التكرارية كتعبيراتمراجعة - محلل أوامر بسيط4تجميع البيانات باستخدام Structs
ما هو الـ Struct؟نظرة عامة على الـ Structsالوصول إلى حقول الـ Structالـ Structs القابلة للتعديلالـ Structs كمعاملات للدوالالـ Tuple Structsمراجعة - إنشاء Book Struct7معالجة الأخطاء باستخدام 'Result'
ما هو 'Result'؟استخدام 'match' مع 'Result'is_ok() و is_err()اختصارات: unwrap و expectعامل علامة الاستفهام '?'تحويل السلاسل النصية إلى أرقامملخص - دالة القسمة الآمنة10الـ Closures والدوال المجهولة
ما هو الـ Closure؟تعريف Closure بسيطالـ Closures مع المعاملاتالتقاط البيئة المحيطةملخص - Closure الجامع البسيط2مقدمة في الـ Vectors
ما هو الـ Vector؟إنشاء Vectorإضافة عناصر باستخدام pushالوصول إلى عناصر الـ Vectorالتكرار عبر الـ Vectorالتكرار القابل للتعديل (Mutable Iteration)إزالة العناصرمراجعة - متتبع نقاط بسيط5أزواج (المفتاح والقيمة) مع Hash Maps
ما هو Hash Map؟إنشاء Hash Mapإدراج أزواج (المفتاح والقيمة)الوصول إلى القيمالتكرار عبر Hash Mapتحديث قيمةإزالة زوجملخص - عداد الكلمات6التعامل مع غياب القيم باستخدام 'Option'
ما هو الـ 'Option'؟استخدام 'match' مع 'Option''is_some()' و 'is_none()'فك تغليف الـ 'Option'الدالة 'expect'توفير قيمة افتراضية: 'unwrap_or'مراجعة - البحث عن عنصر9شرائح الـ String والمزيد
String مقابل &strإنشاء شرائح الـ Stringالشرائح كمعاملات للدوالشرائح أخرىمراجعة - إيجاد الكلمة الأولىتدرّب بنفسك: مترجم Rust عبر الإنترنت