الحلقات التكرارية كتعبيرات
جزء من قسم المنطق وتدفّق التنفيذ في رحلة Rust على Coddy. الدرس 5 من 66.
في معظم لغات البرمجة، تكون الحلقات عبارات تنفّذ التعليمات البرمجية بشكل متكرر. لكن لدى Rust ميزة فريدة: يمكن أن تكون الحلقات أيضًا تعبيرات تُرجع قيمة. وهذا يعني أنه يمكنك إسناد نتيجة حلقة إلى متغيّر.
لإرجاع قيمة من حلقة، تستخدم 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.
التحدي
سهلستتلقى number ابتدائيًا كـ input. اقرأ input، وحوّله إلى عدد صحيح، واستخدم تعبير loop للعثور على أول number يقبل القسمة على 7 بدءًا من ذلك number.
المتطلبات:
- استخدم تعبير
loopيعيد قيمة - ابدأ checking من input number
- اعثر على first number يقبل القسمة على 7 (الباقي يساوي 0 عند القسمة على 7)
- استخدم
breakلإعادة found number منloop - اطبع result
Input: عدد صحيح واحد يمثّل starting number
Output: اطبع first number يقبل القسمة على 7 بدءًا من input number
جرّب بنفسك
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: اكتب الكود الخاص بك أدناه
// استخدم تعبير حلقة للعثور على أول عدد قابل للقسمة على 7
// اطبع النتيجة
// println!("{}", result);
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفّق التنفيذ
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الشرائح كمعاملات للدوالشرائح أخرىمراجعة - إيجاد الكلمة الأولىتدرّب بنفسك: مترجم Rust عبر الإنترنت