0Pricing
Learn Rust Coding · درس

حراس match والربط

أضف الشروط والتقط القيم

حراس match والربط درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

ما هو حارس المطابقة؟

حارس المطابقة هو شرط if إضافي يُضاف إلى ذراع مطابقة. ولا يُنفَّذ الذراع إلا عندما ينطبق النمط ويكون الشرط صحيحًا.

يتيح لك تقسيم متغير واحد إلى حالات أدق استنادًا إلى بياناته.

match number {
    Some(n) if n > 0 => println!("positive"),
    Some(n) => println!("zero or negative"),
    None => println!("no number"),
}

صيغة الحارس

اكتب النمط، ثم if condition، ثم =>. ويمكن للشرط استخدام أي متغيرات ربطها النمط.

إذا كان الحارس غير صحيح، تتابع Rust تجربة الذراع التالي.

fn main() {
    let n = 4;
    match n {
        x if x % 2 == 0 => println!("even"),
        _ => println!("odd"),
    }
}

الحراس مع بيانات التعداد

تكون الحراس أكثر فائدة مع التعدادات التي تحتوي على بيانات. اربط القيمة الداخلية، ثم اختبرها.

تحصل الأرصدة الموجبة والسالبة هنا على رسائل مختلفة، رغم أنها تنتمي إلى المتغير نفسه.

enum Account {
    Balance(i32),
    Closed,
}

fn main() {
    let a = Account::Balance(-5);
    match a {
        Account::Balance(b) if b < 0 => println!("overdrawn"),
        Account::Balance(b) => println!("balance {}", b),
        Account::Closed => println!("closed"),
    }
}

لا يزال الترتيب مهمًا

بما أن الأذرع تُجرَّب من الأعلى إلى الأسفل، ضع الذراع المحروس الأكثر تحديدًا قبل الذراع العام.

لو جاء ذراع Balance(b) العادي أولًا، لطابق كل شيء، ولما نُفّذ الذراع المحروس مطلقًا.

مطابقة القيم الحرفية

يمكنك أيضًا المطابقة مباشرةً مع قيم حرفية محددة في النمط، من دون حارس.

تُطابق 0 و1 هنا تطابقًا دقيقًا، بينما يتعامل _ مع بقية القيم.

fn main() {
    let n = 1;
    match n {
        0 => println!("zero"),
        1 => println!("one"),
        _ => println!("many"),
    }
}

مطابقة النطاقات

يمكن للأنماط مطابقة نطاق من القيم باستخدام ..=، وهو شامل للطرفين.

يُعد هذا بديلًا واضحًا عن عدة حراس للمقارنة.

fn main() {
    let score = 85;
    match score {
        0..=59 => println!("fail"),
        60..=100 => println!("pass"),
        _ => println!("out of range"),
    }
}

الربط باستخدام العامل @

يتيح لك العامل @ اختبار قيمة مقابل نمط وربطها باسم في الوقت نفسه.

يتحقق id @ 1..=5 هنا من النطاق، ويخزن القيمة الفعلية في id حتى تتمكن من طباعتها.

fn main() {
    let n = 3;
    match n {
        id @ 1..=5 => println!("small id {}", id),
        other => println!("other {}", other),
    }
}

ربط القيمة بأكملها

يربط الاسم العادي في النمط، مثل other أعلاه، القيمة بأكملها. ويعمل كنمط شامل يمكنك الاستمرار في استخدامه.

استخدم _ عندما تريد تجاهل القيمة، واستخدم اسمًا عندما تحتاج إليها.

fn main() {
    let n = 99;
    match n {
        0 => println!("zero"),
        value => println!("got {}", value),
    }
}

جمع الحراس والربط

يمكنك الجمع بين الربط والحارس للتحكم بدقة: اربط البيانات، ثم أضف شرطًا.

يضع هذا البرنامج علامة خاصة على الأرصدة الزوجية الكبيرة.

enum Account {
    Balance(i32),
}

fn main() {
    let a = Account::Balance(200);
    match a {
        Account::Balance(b) if b > 100 && b % 2 == 0 => println!("big even {}", b),
        Account::Balance(b) => println!("normal {}", b),
    }
}

الحراس مع أنماط متعددة

ينطبق الحارس على الذراع بأكمله، حتى عندما يجمع الذراع بين أنماط باستخدام |.

يُفحَص الشرط بعد انطباق أي نمط من الأنماط المدرجة.

fn main() {
    let n = 6;
    match n {
        2 | 4 | 6 if n > 3 => println!("big even"),
        _ => println!("other"),
    }
}

تجميع العناصر معًا

يجمع هذا البرنامج النهائي بين المتغيرات الحاملة للبيانات، والربط، والحارس، والنمط الشامل لتصنيف قراءة درجة حرارة.

غيّر القيمة ثم شغّل البرنامج مرة أخرى لترى أذرعًا مختلفة تُنفّذ.

enum Reading {
    Temp(i32),
    Missing,
}

fn main() {
    let r = Reading::Temp(38);
    match r {
        Reading::Temp(t) if t >= 38 => println!("fever: {}", t),
        Reading::Temp(t) => println!("normal: {}", t),
        Reading::Missing => println!("no reading"),
    }
}

تحقق سريع

تحقق من فهمك للحراس والربط.

مراجعة

تعلمت تحسين المطابقات باستخدام الحراس (pattern if condition)، ومطابقة القيم الحرفية والنطاقات (..=)، وإنشاء روابط باستخدام الأسماء أو العامل @.

وبدمج ذلك مع كل ما سبق، يمكنك الآن نمذجة مجموعات ثابتة من الحالات، وإرفاق البيانات بها، والاستجابة لكل حالة بدقة. عمل رائع في موضوعي التعدادات وmatch!

الأسئلة الشائعة

هل درس «حراس match والربط» مجاني؟

نعم — نص درس «حراس match والربط» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

ماذا ستتعلم في «حراس match والربط»؟

أضف الشروط والتقط القيم تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟

لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «حراس match والربط»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟

نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تعريف أول enum لك
  2. مطابقة متغيرات enum
  3. Enums مع البيانات
  4. حراس match والربط
← العودة إلى Learn Rust Coding