جملة Match
جزء من قسم Fundamentals في رحلة Rust على Coddy — الدرس 26 من 75.
يتيح لك تعبير المطابقة (match expression) مقارنة قيمة بمجموعة من الأنماط وتنفيذ الكود بناءً على النمط الذي يتطابق معها.
إليك الهيكل الأساسي لتعبير match:
match variable {
pattern1 => expression1,
pattern2 => expression2,
// ... المزيد من الأنماط
_ => default_expression,
}الكلمة المفتاحية match يتبعها القيمة التي تريد اختبارها.
يتكون كل ذراع من أذرع المطابقة من نمط يتبعه => والكود المراد تنفيذه.
الشرطة السفلية _ هي الحالة الافتراضية التي تطابق أي شيء لم تطابقه الأنماط الأخرى.
إليك مثالاً:
let day = 3;
let day_name = match day {
1 => "Monday",
2 => "Tuesday",
3 => "Wednesday",
// ... المزيد من الأنماط،
_ => "Invalid day",
};بالنسبة لأسطر التعليمات البرمجية المتعددة في ذراع (arm)، استخدم كتلة (block):
let day = 3;
let day_name = match day {
1 => {
println!("First day of the week!");
"Monday"
},
2 => "Tuesday",
// ... حالات أخرى
_ => "Invalid day",
};يمكنك مطابقة أنماط متعددة باستخدام |:
let day = 3;
let day_type = match day {
1 | 2 | 3 | 4 | 5 => "Weekday",
6 | 7 => "Weekend",
_ => "Invalid day",
};تعبيرات Match في لغة Rust يجب أن تكون شاملة، مما يعني أنها يجب أن تغطي جميع القيم الممكنة. سيقوم المترجم (compiler) بالتحقق من ذلك من أجلك.
التحدي
مبتدئأنشئ برنامجًا يأخذ رقم الشهر (1 لشهر يناير، 2 لشهر فبراير، إلخ) ويطبع الفصل الذي ينتمي إليه. استخدم عبارة match للمنطق البرمجي.
الفصول والشهور المقابلة لها هي:
- Winter: ديسمبر (12)، يناير (1)، فبراير (2)
- Spring: مارس (3)، أبريل (4)، مايو (5)
- Summer: يونيو (6)، يوليو (7)، أغسطس (8)
- Autumn: سبتمبر (9)، أكتوبر (10)، نوفمبر (11)
ورقة مرجعية
يقارن تعبير match قيمة مقابل أنماط وينفذ الكود بناءً على النمط الذي يتطابق:
match variable {
pattern1 => expression1,
pattern2 => expression2,
_ => default_expression,
}مثال أساسي:
let day = 3;
let day_name = match day {
1 => "Monday",
2 => "Tuesday",
3 => "Wednesday",
_ => "Invalid day",
};بالنسبة لأسطر الكود المتعددة في ذراع (arm)، استخدم كتلة (block):
let day = 3;
let day_name = match day {
1 => {
println!("First day of the week!");
"Monday"
},
2 => "Tuesday",
_ => "Invalid day",
};طابق أنماطاً متعددة باستخدام |:
let day = 3;
let day_type = match day {
1 | 2 | 3 | 4 | 5 => "Weekday",
6 | 7 => "Weekend",
_ => "Invalid day",
};يجب أن تكون تعبيرات Match شاملة - يجب أن تغطي جميع القيم الممكنة. الشرطة السفلية _ هي الحالة الافتراضية التي تطابق أي شيء لم تطابقه الأنماط الأخرى.
جرّب بنفسك
use std::io;
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let month: i32 = input.trim().parse().unwrap();
// اكتب الكود الخاص بك أدناه
let season =
// لا تقم بتغيير السطر أدناه
println!("status = {}", season);
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Fundamentals
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)اختصارات العمليات الحسابيةمعاملات المقارنةمقارنة النصوص7أساسيات الإدخال والإخراج
الطباعة على الكونسولقراءة مدخلات المستخدممراجعة - حتى 120مراجعة - True أو False2المتغيرات - الجزء الأول
الأرقامالمحارف (Char)النصوص (String)القيم المنطقية (Boolean)المتغيرات القابلة للتغيير5المعاملات - الجزء الثاني
المعاملات المنطقية - الجزء الأولالمعاملات المنطقية - الجزء الثانيمراجعة - المنطق البسيطالمعاملات المنطقية - الجزء الثالث11الدوال
تعريف الدوالالمعاملات والوسائطقيم الإرجاعقيم إرجاع متعددةمراجعة - دالة Sigmaمراجعة - دالة التحقق14التكرار عبر المصفوفات
دليل النطاق (Range)حلقة For المحسنةالاستعارة في الحلقةعمليات المصفوفات الشائعة3المتغيرات - الجزء الثاني
التصريح عن النوعقواعد التسميةاستنتاج النوعمراجعة - تهيئة المتغيراتتحويل الأنواع9الحلقات التكرارية
For عبر السلاسلحلقة Whileجملة Breakجملة Continueالحلقات المتداخلةتسميات الحلقاتالحلقة اللانهائيةمراجعة - الإدخال الديناميكي