الانتقال إلى المحتوى الرئيسي
الوحدة 2 · الدرس 1 من 23/14 في الدورة~12 min
دروس الوحدة (1/2)

الشروط والحلقات

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

الشروط الشرطية: if كتعبير

في Rust، عبارة if هي تعبير، مما يعني أنها تُرجع قيمة. يمكننا استخدام if لتعيين قيمة للمتغير مباشرة:

Rust
let condition = true;
let number = if condition { 5 } else { 6 }; // if/else as an expression

الحلقات والتكرارات

يوفر Rust ثلاثة أنواع من الحلقات الأصلية: loop، وwhile، ​​وfor.

1. loop (حلقة لا نهائية)

تنشئ الكلمة الأساسية loop حلقة لا نهائية تستمر حتى تطلب منها صراحةً التوقف عن استخدام break:

Rust
let mut count = 0;
loop {
    count += 1;
    if count == 10 {
        break; // Exit the loop
    }
}

بالإضافة إلى ذلك، يمكنك إرجاع قيمة من loop بوضعها مباشرة بعد break:

Rust
let result = loop {
    count += 1;
    if count == 10 {
        break count * 2; // Returns 20
    }
};

2. while (الحلقة الشرطية)

تشغيل كتلة من التعليمات البرمجية طالما ظل الشرط المنطقي صحيحًا:

Rust
let mut number = 3;
while number != 0 {
    println!("{}!", number);
    number -= 1;
}

3. for (التكرار على المجموعات والنطاقات)

تعد الحلقة for الأداة الأكثر شيوعًا والأكثر أمانًا للتكرار على العناصر الموجودة في مجموعة أو نطاق من الأرقام:

Rust
// Iterates over numbers 1 through 3 (excluding 4)
for number in 1..4 {
    println!("Valore: {}", number);
}

// Iterates including the right boundary using '='
for number in 1..=3 {
    println!("Valore: {}", number); // Prints 1, 2 and 3
}

تسميات الحلقة

عند التعامل مع الحلقات المتداخلة، تنطبق عبارات break وcontinue على الحلقة الأعمق بشكل افتراضي. يتيح لك Rust استخدام تسمية حلقة (مكتوبة كـ 'label_name:) لإنهاء حلقة خارجية أو مواصلتها بشكل صريح:

Rust
let mut count = 0;
'outer: loop {
    loop {
        if count == 5 {
            break 'outer; // Exits the outer loop directly
        }
        count += 1;
    }
}

جربه بنفسك

تمرين#rust.m2.l1.e1
المحاولات: 0جارٍ التحميل…

قم بتعريف متغير مسمى رقم بقيمة 7. بعد ذلك، استخدم تعبير if/else لتعيين القيمة "أكبر" لرسالة المتغير إذا كان الرقم أكبر من 5، أو "أصغر" بخلاف ذلك. وأخيرًا، قم بطباعة الرسالة باستخدام println!.

جارٍ تحميل المحرر…
إظهار التلميح

اكتب `let message = if number > 5 { 'greater' } else { 'smaller' };` ومررها إلى `println!`.

الحل متاح بعد 3 من المحاولات

تمرين#rust.m2.l1.e2
المحاولات: 0جارٍ التحميل…

اكتب حلقة for تطبع الأرقام من 1 إلى 5 (أي 1، 2، 3، 4، 5) باستخدام println! في كل التكرار.

جارٍ تحميل المحرر…
إظهار التلميح

استخدم صيغة النطاق الشامل `for i in 1..=5` وقم بتشغيل `println!('{}', i);` داخل الكتلة.

الحل متاح بعد 3 من المحاولات

تمرين#rust.m2.l1.e3
المحاولات: 0جارٍ التحميل…

اكتب حلقة تزيد عداد متغير قابل للتغيير بدءًا من 0. عندما يصل العداد إلى 10، قم بالخروج من الحلقة وإرجاع العداد مضروبًا في 5 باستخدام عبارة Break لتعيين هذه القيمة لنتيجة متغير غير قابل للتغيير. وأخيرا، طباعة النتيجة.

جارٍ تحميل المحرر…
إظهار التلميح

استخدم `اسمحوا النتيجة = حلقة { ... }؛`. داخل الحلقة قم بزيادة `counter` وأضف الشرط `if counter == 10 {break counter * 5; }`.

الحل متاح بعد 3 من المحاولات