الحلقات التكرارية كتعبيرات
جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 5 من 66.
في معظم لغات البرمجة، تُعد الحلقات التكرارية (loops) عبارات (statements) تنفذ الكود بشكل متكرر. لكن لغة Rust تمتلك ميزة فريدة: يمكن أن تكون الحلقات التكرارية أيضاً تعبيرات (expressions) تُرجع قيمة. وهذا يعني أنه يمكنك إسناد نتيجة الحلقة التكرارية إلى متغير.
لإرجاع قيمة من حلقة (loop)، يمكنك استخدام break متبوعة بالقيمة التي تريد إرجاعها:
let result = loop {
// بعض التحقق من الشروط
if condition_met {
break 42; // الخروج من الحلقة وإرجاع 42
}
};إليك مثال عملي يجد أول رقم زوجي بدءاً من 10:
let mut counter = 10;
let first_even = loop {
if counter % 2 == 0 {
break counter; // إرجاع الرقم الزوجي
}
counter += 1;
};
println!("First even number: {}", first_even);تستمر الحلقة حتى تجد رقماً زوجياً، ثم تستخدم break counter للخروج من الحلقة وإرجاع ذلك الرقم. يتم تعيين القيمة المرجعة إلى first_even.
التحدي
سهلستتلقى رقماً كبداية كمدخل. اقرأ المدخلات، وقم بتحويلها إلى عدد صحيح، واستخدم تعبير loop للعثور على أول رقم يقبل القسمة على 7 بدءاً من ذلك الرقم.
المتطلبات:
- استخدم تعبير
loopيقوم بإرجاع قيمة - ابدأ التحقق من الرقم المدخل
- ابحث عن أول رقم يقبل القسمة على 7 (الباقي هو 0 عند القسمة على 7)
- استخدم
breakلإرجاع الرقم الذي تم العثور عليه من الحلقة - اطبع النتيجة
المدخلات: عدد صحيح واحد يمثل رقم البداية
المخرجات: اطبع أول رقم يقبل القسمة على 7 بدءاً من الرقم المدخل
ورقة مرجعية
في لغة Rust، يمكن أن تكون الحلقات التكرارية (loops) عبارة عن تعبيرات (expressions) تُرجع قيمة. استخدم break متبوعة بقيمة للخروج من الحلقة وإرجاع تلك القيمة:
let result = loop {
if condition_met {
break 42; // exit loop and return 42
}
};مثال على إيجاد أول عدد زوجي:
let mut counter = 10;
let first_even = loop {
if counter % 2 == 0 {
break counter; // return the even number
}
counter += 1;
};
println!("First even number: {}", first_even);جرّب بنفسك
use std::io;
fn main() {
// قراءة المدخلات
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let start_number: i32 = input.trim().parse().expect("Invalid input");
// TODO: اكتب الكود الخاص بك أدناه
// استخدم تعبير حلقة (loop) للعثور على أول رقم يقبل القسمة على 7
// طباعة النتيجة
// println!("{}", result);
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1تدفق التحكم المتقدم
تعبير 'match'مطابقة قيم متعددةمطابقة النطاقاتتعبير 'if let'الحلقات التكرارية كتعبيراتمراجعة - محلل أوامر بسيط4تجميع البيانات باستخدام Structs
ما هو الـ Struct؟نظرة عامة على الـ Structsالوصول إلى حقول الـ Structالـ Structs القابلة للتعديلالـ Structs كمعاملات للدوالالـ Tuple Structsمراجعة - إنشاء Book Struct7معالجة الأخطاء باستخدام 'Result'
ما هو 'Result'؟استخدام 'match' مع 'Result'is_ok() و is_err()اختصارات: unwrap و expectعامل علامة الاستفهام '?'تحويل السلاسل النصية إلى أرقامملخص - دالة القسمة الآمنة10الـ Closures والدوال المجهولة
ما هو الـ Closure؟تعريف Closure بسيطالـ Closures مع المعاملاتالتقاط البيئة المحيطةملخص - Closure الجامع البسيط2مقدمة في الـ Vectors
ما هو الـ Vector؟إنشاء Vectorإضافة عناصر باستخدام pushالوصول إلى عناصر الـ Vectorالتكرار عبر الـ Vectorالتكرار القابل للتعديل (Mutable Iteration)إزالة العناصرمراجعة - متتبع نقاط بسيط5أزواج (المفتاح والقيمة) مع Hash Maps
ما هو Hash Map؟إنشاء Hash Mapإدراج أزواج (المفتاح والقيمة)الوصول إلى القيمالتكرار عبر Hash Mapتحديث قيمةإزالة زوجملخص - عداد الكلمات6التعامل مع غياب القيم باستخدام 'Option'
ما هو الـ 'Option'؟استخدام 'match' مع 'Option''is_some()' و 'is_none()'فك تغليف الـ 'Option'الدالة 'expect'توفير قيمة افتراضية: 'unwrap_or'مراجعة - البحث عن عنصر9شرائح الـ String والمزيد
String مقابل &strإنشاء شرائح الـ Stringالشرائح كمعاملات للدوالشرائح أخرىمراجعة - إيجاد الكلمة الأولى