يتيح لك التحكم في مسار التنفيذ في Cairo توجيه مسار برامجك بناءً على الشروط والتكرار.
استخدم تعبيرات if لتنفيذ الكود بناءً على شروط:
let number = 42;
if number > 0 {
println!("Positive number");
} else if number < 0 {
println!("Negative number");
} else {
println!("Zero");
}
if تعبير، لذا يمكنه أن يُرجع قيمًا:
let result = if condition { 5 } else { 10 };
استخدم loop لتكرار الكود.
تعمل الحلقة بلا توقف ما لم توقفها بنفسك؛ استخدم break للخروج من الحلقة عند تحقق شرط معيّن.
let mut counter = 0;
loop {
if counter == 5 {
break;
}
println!("Counter: {}", counter);
counter += 1;
}
يمكن للحلقات أن تُرجع قيمًا باستخدام break:
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2; // Returns 20
}
};
استخدم continue لتجاوز ما تبقّى والانتقال إلى التكرار التالي:
let mut i = 0;
loop {
i += 1;
if i % 2 == 0 {
continue; // Skip even numbers
}
if i > 10 {
break;
}
println!("{}", i); // Only prints odd numbers
}
في هذا التمرين، ستساعد في إدارة العمليات اليومية لمخبز صغير باستخدام تراكيب التحكم في مسار التنفيذ التي توفرها Cairo.
نفّذ الدالة calculate_total التي تحسب تكلفة الطلب بناءً على نوع المعجنات والكمية:
calculate_total(Pastry::Croissant, 4) // Returns: 12 (4 * 3)
calculate_total(Pastry::Cookie, 10) // Returns: 10 (10 * 1)
نفّذ الدالة apply_discount التي تطبّق الخصومات بناءً على إجمالي الطلب.
طبّق نسبة الخصم على الإجمالي، ثم قرّب النتيجة إلى أقرب عملة كاملة نحو الأسفل (floor).
apply_discount(25) // Returns: 22
apply_discount(15) // Returns: 14
apply_discount(8) // Returns: 8
نفّذ الدالة baking_schedule التي تنشئ خطة خَبز يومية.
تُخبز الطلبات في دفعات من 5 طلبات كل ساعة:
baking_schedule(18) // Returns: [5, 5, 5, 3] (3 full batches + 3 remaining)
baking_schedule(10) // Returns: [5, 5] (2 full batches)
baking_schedule(3) // Returns: [3] (1 partial batch)
استخدم تراكيب التحكم المناسبة (if/else، loop) لحل كل مشكلة بكفاءة.
سجّل في Exercism لتتعلّم وتتقن Cairo عبر 25 مفهومًا68 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.