الربط باستخدام @
التقاط واختبار
الربط باستخدام @ درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
عامل الإسناد @
يتيح لكم العامل @ اختبار قيمة مقابل نمط وإسنادها إلى اسم في الوقت نفسه. وهكذا تحصلون على الاختبار والقيمة معًا.
المشكلة التي يحلها
باستخدام نمط نطاق، تعرفون أن القيمة تقع ضمن النطاق، لكنكم تفقدون إمكانية الوصول إلى القيمة المحددة. يلتقطها @ مع الاستمرار في اختبار النطاق.
الإسناد الأساسي باستخدام @
نطابق هنا رقمًا ضمن نطاق ونحتفظ بقيمته الدقيقة عبر id.
fn main() {
let n = 5;
match n {
id @ 1..=5 => println!("got {id} in range"),
_ => println!("out of range"),
}
}بدون @
قارنوا ذلك بما يلي: يطابق ذراع النطاق العادي القيمة، لكنه لا يستطيع تسميتها، ولذلك لا يمكنكم طباعة الرقم الذي تمت مطابقته.
fn main() {
let n = 5;
match n {
1..=5 => println!("in range (value unknown here)"),
_ => println!("out of range"),
}
}استخدام @ مع بيانات التعداد
أسندوا حقلًا مع تقييده في الوقت نفسه. نلتقط هنا المعرّف فقط إذا وقع ضمن نطاق صالح.
enum Message {
Hello { id: i32 },
}
fn main() {
let msg = Message::Hello { id: 7 };
match msg {
Message::Hello { id: id @ 3..=10 } => {
println!("valid id {id}");
}
Message::Hello { id } => {
println!("other id {id}");
}
}
}إسناد القيمة كاملة
يمكن لـ @ أيضًا إسناد قيمة مهيكلة كاملة، بينما يتحقق نمط متداخل من أجزائها.
fn main() {
let point = (3, 4);
match point {
p @ (x, _) if x > 0 => println!("{:?} has positive x", p),
p => println!("{:?}", p),
}
}الدمج مع |
يمكنكم إجراء الإسناد عبر الأنماط البديلة. يجب أن يظهر الاسم في كل فرع بديل.
fn main() {
let code = 404;
match code {
c @ (400 | 404 | 500) => println!("error code {c}"),
c => println!("code {c}"),
}
}استخدام @ في if let
تعمل عمليات الإسناد باستخدام @ داخل if let أيضًا.
fn main() {
let value = Some(50);
if let Some(n @ 1..=100) = value {
println!("in range: {n}");
}
}متى تستخدمون @
استخدموا @ عندما تحتاجون إلى كلا الأمرين:
- تقييد قيمة باستخدام نطاق أو نمط فرعي
- استخدام تلك القيمة الدقيقة في جسم الذراع
إذا لم تكونوا بحاجة إلى الأمرين معًا، فالإسناد أو النمط العادي أبسط.
قابلية القراءة
تُقرأ الصيغة بالشكل name @ pattern: أسندوا name إذا طابقت pattern. احرصوا على أن تكون الأسماء وصفية حتى تكون الغاية واضحة.
التصنيف إلى مجموعات باستخدام @
من الاستخدامات الشائعة تصنيف قيمة ضمن مجموعات معنونة مع الاحتفاظ بالرقم الأصلي لإعداد التقارير.
fn classify(temp: i32) -> String {
match temp {
t @ ..=0 => format!("freezing ({t})"),
t @ 1..=20 => format!("cool ({t})"),
t @ 21..=30 => format!("warm ({t})"),
t => format!("hot ({t})"),
}
}
fn main() {
println!("{}", classify(25));
}اختبار سريع
ماذا يفعل العامل @ في نمط مثل id @ 1..=5؟
مراجعة
لقد تعلمتم عامل الإسناد @:
- يسند قيمة إلى اسم أثناء اختبارها مقابل نمط
- يحل مشكلة فقدان القيمة مع أنماط النطاق
- يعمل مع بيانات التعداد، والصفوف، والبدائل
|، وif let - استخدموه عندما تحتاجون إلى القيد والقيمة معًا
الأسئلة الشائعة
هل درس «الربط باستخدام @» مجاني؟
نعم — نص درس «الربط باستخدام @» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
ماذا ستتعلم في «الربط باستخدام @»؟
التقاط واختبار تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟
لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «الربط باستخدام @»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟
نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تعمّق في match
- if let وwhile let
- الربط باستخدام @
- التفكيك البنيوي