if let وwhile let
مطابقة موجزة
if let وwhile let درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
المطابقة الموجزة
أحيانًا تهتمون بنمط واحد فقط. يوفّر لكم if let وwhile let مطابقة موجزة من دون استخدام match كامل.
صيغة if let
ينفّذ if let كتلةً فقط عندما تطابق قيمةٌ نمطًا، مع ربط أي بيانات ملتقطة.
fn main() {
let maybe = Some(10);
if let Some(n) = maybe {
println!("value is {n}");
}
}مقارنة if let وmatch
إن if let صيغة مختصرة لـ match تحتوي على ذراع مهم واحد، مع مسار بديل _ => (). استخدموه عندما لا تحتاج الحالات الأخرى إلى معالجة.
fn main() {
let config: Option<i32> = None;
// match equivalent would have an empty _ arm
if let Some(v) = config {
println!("configured: {v}");
}
println!("done");
}إضافة else
أضيفوا else لمعالجة الحالة التي لا تطابق النمط.
fn main() {
let result: Result<i32, String> = Err("boom".to_string());
if let Ok(v) = result {
println!("ok: {v}");
} else {
println!("failed");
}
}let else
تربط let ... else القيم عندما يطابق النمط، وإلا فتُشغّل كتلة لا تعود إلى مسار التنفيذ العادي، مثل return. وهذا مناسب جدًا للخروج المبكر.
fn parse(s: &str) -> i32 {
let Ok(n) = s.parse::<i32>() else {
println!("not a number");
return 0;
};
n * 2
}
fn main() {
println!("{}", parse("21"));
println!("{}", parse("oops"));
}صيغة while let
يواصل while let التكرار ما دامت قيمة ما تطابق نمطًا. وهو مثالي لتفريغ أشياء مثل المكدسات.
fn main() {
let mut stack = vec![1, 2, 3];
while let Some(top) = stack.pop() {
println!("popped {top}");
}
}التكرار عبر المكررات
يمكن لـ while let التكرار عبر استدعاء next مرارًا، والتوقف عندما يُرجع None.
fn main() {
let mut iter = [10, 20, 30].into_iter();
while let Some(x) = iter.next() {
println!("{x}");
}
}الحراس مع if let
اجمعوا الحارس بإضافة شرط && (في Rust 2024)، أو بتداخل if داخله.
fn main() {
let value = Some(8);
if let Some(n) = value {
if n > 5 {
println!("big: {n}");
}
}
}متى تستخدمون كل صيغة
إرشادات:
if let— معالجة نمط واحد وتجاهل الباقيlet else— إسناد القيمة أو الخروج مبكرًاwhile let— تكرار الحلقة ما دام النمط متطابقًاmatch— عند الحاجة إلى معالجة حالات متعددة
الموازنة بين قابلية القراءة
تقلل هذه الصيغ التعليمات البرمجية المتكررة، لكنها قد تخفي بعض الحالات. إذا وجدتم أنفسكم تعالجون عدة أنماط، فاستخدموا match الكامل مجددًا لتحسين الوضوح.
تداخل if let
يمكنكم تسلسل القيم الاختيارية من خلال تداخل if let، وفك تغليف طبقة واحدة في كل مرة.
fn main() {
let outer: Option<Option<i32>> = Some(Some(99));
if let Some(inner) = outer {
if let Some(value) = inner {
println!("value is {value}");
}
}
}اختبار سريع
ما البنية التي تكرر تشغيل جسم الحلقة ما دامت القيمة تطابق نمطًا معينًا؟
مراجعة
لقد تعلمتم المطابقة المختصرة:
- تعالج
if letنمطًا واحدًا، مع إمكانية استخدامelse - تسند
let elseالقيمة أو تتفرع مبكرًا - تكرر
while letالحلقة ما دام النمط متطابقًا - انتقلوا إلى
matchعند الحاجة إلى معالجة حالات متعددة
الأسئلة الشائعة
هل درس «if let وwhile let» مجاني؟
نعم — نص درس «if let وwhile let» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.
ماذا ستتعلم في «if let وwhile let»؟
مطابقة موجزة تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟
لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «if let وwhile let»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟
نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تعمّق في match
- if let وwhile let
- الربط باستخدام @
- التفكيك البنيوي