مطابقة متغيرات enum
استخدم match للتعامل مع كل حالة
مطابقة متغيرات enum درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
التعرّف على تعبير match
يقارن تعبير match قيمةً بسلسلة من الأنماط، وينفّذ الشيفرة الخاصة بأول نمط ينطبق عليها.
وهو الشريك الطبيعي للتعدادات؛ إذ يمكنك التعامل مع كل متغير في ذراع خاص به.
enum Light {
Red,
Green,
}
fn action(l: Light) {
match l {
Light::Red => println!("Stop"),
Light::Green => println!("Go"),
}
}بنية ذراع match
يتخذ كل ذراع الصيغة pattern => expression، وتُفصل الأذرع بفواصل.
النمط هو ما تريد مطابقته، والتعبير الذي يلي => يُنفَّذ عند تحقق المطابقة. النمط هنا هو متغير تعداد واحد.
match light {
Light::Red => println!("Stop"),
Light::Green => println!("Go"),
}برنامج مطابقة كامل
إليك برنامجًا كاملًا يطابق إشارة مرور ويطبع تعليمات.
شغّله، ثم غيّر المتغير في main لترى ذراعًا مختلفًا يُنفَّذ.
enum TrafficLight {
Red,
Yellow,
Green,
}
fn main() {
let light = TrafficLight::Yellow;
match light {
TrafficLight::Red => println!("Stop"),
TrafficLight::Yellow => println!("Slow down"),
TrafficLight::Green => println!("Go"),
}
}يجب أن يكون match شاملًا
تتطلب Rust أن يغطي match كل متغير ممكن. وإذا نسيت أحدها، فلن يُترجم البرنامج.
هذه ميزة أمان قوية: إذا أضفت متغيرًا جديدًا لاحقًا، فسيذكّرك المترجم بكل موضع يجب أن يتعامل معه.
// This would FAIL to compile because
// the Green case is missing:
// match light {
// Light::Red => println!("Stop"),
// }النمط الشامل باستخدام _
عندما لا تريد إدراج كل المتغيرات، استخدم الشرطة السفلية _ كنمط شامل. فهي تطابق أي شيء لم تتم معالجته أعلاه.
ضعها في النهاية، لأن الأذرع تُجرَّب بالترتيب.
enum Coin {
Penny,
Nickel,
Dime,
Quarter,
}
fn main() {
let c = Coin::Dime;
match c {
Coin::Penny => println!("1 cent"),
_ => println!("Some other coin"),
}
}يعيد match قيمة
إن match هو تعبير، ولذلك ينتج قيمة يمكنك تخزينها في متغير.
يجب أن يعيد كل ذراع النوع نفسه. لاحظ عدم وجود فاصلة منقوطة بعد تعبير كل ذراع هنا.
enum Coin {
Penny,
Quarter,
}
fn main() {
let coin = Coin::Quarter;
let cents = match coin {
Coin::Penny => 1,
Coin::Quarter => 25,
};
println!("{} cents", cents);
}أجسام الأذرع متعددة الأسطر
يمكن للذراع تنفيذ عدة تعليمات بتغليفها داخل أقواس معقوفة { ... }.
التعبير الأخير داخل الأقواس هو القيمة التي ينتجها الذراع.
match light {
Light::Red => {
println!("Caution!");
println!("Stop the car");
}
Light::Green => println!("Go"),
}دمج الأنماط باستخدام |
استخدم الخط العمودي | لمطابقة عدة متغيرات في ذراع واحد. ويُقرأ بمعنى «أو».
يمنع ذلك تكرار الجسم نفسه للمتغيرات التي يجب أن تتصرف بالطريقة نفسها.
enum Coin {
Penny,
Nickel,
Dime,
Quarter,
}
fn main() {
let c = Coin::Nickel;
match c {
Coin::Penny | Coin::Nickel => println!("Small coin"),
_ => println!("Bigger coin"),
}
}match في مقابل if/else
يمكنك ربط if وelse if للتحقق من المتغيرات، لكن match أوضح وأكثر أمانًا.
يتحقق المترجم مع match من أنك عالجت كل حالة. أما سلسلة تعليمات if فلا تقدم هذا الضمان.
المطابقة والطباعة معًا
من الأنماط الشائعة تحويل متغير إلى سلسلة نصية سهلة الفهم ثم طباعتها.
شغّل هذا البرنامج وغيّر الاتجاه المحدد لترى الرسالة المطابقة.
enum Direction {
North,
South,
East,
West,
}
fn main() {
let d = Direction::West;
let name = match d {
Direction::North => "North",
Direction::South => "South",
Direction::East => "East",
Direction::West => "West",
};
println!("Heading {}", name);
}الترتيب مهم
تُفحص الأذرع من الأعلى إلى الأسفل، وتفوز أول مطابقة. أما البقية فيتم تجاوزها.
لذلك يجب أن يأتي النمط الشامل _ أخيرًا؛ فلو جاء أولًا، لالتهم كل قيمة قبل أن تتمكن الأذرع المحددة من التنفيذ.
تحقق سريع
تحقق من فهمك لـ match.
مراجعة
تعلمت أن match يقارن قيمةً بالأنماط وينفّذ أول ذراع مطابق.
ويجب أن يكون شاملًا، ويمكنه استخدام _ كنمط شامل، ودمج المتغيرات باستخدام |، كما يعيد قيمة لأنه تعبير. ستمنح متغيرات التعداد بياناتها الخاصة لاحقًا.
الأسئلة الشائعة
هل درس «مطابقة متغيرات enum» مجاني؟
نعم — نص درس «مطابقة متغيرات enum» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
ماذا ستتعلم في «مطابقة متغيرات enum»؟
استخدم match للتعامل مع كل حالة تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟
لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «مطابقة متغيرات enum»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟
نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تعريف أول enum لك
- مطابقة متغيرات enum
- Enums مع البيانات
- حراس match والربط