أحد الأشياء التي تكون أجهزة الكمبيوتر جيدة فيها بشكل خاص هو التكرار. كيف يمكننا إقناع كاريل بتنفيذ مجموعة من التعليمات البرمجية عدة مرات؟ لمعرفة كيف يمكن استخدام التكرار ، فكر في مهمة وضع 42 مخروط s:
نظرًا لأنك تعلم أن هناك ما مخروط 42 مخروط ثانية ، فإن بيان التحكم الذي تحتاجه هو دورة for ، الذي يحدد أنك تريد تكرار بعض العمليات لعدد محدد من المرات. يبدو هيكل العبارة for معقدًا في المقام الأول لأنه في الواقع أقوى بكثير من أي شيء يحتاجه كاريل . الإصدار الوحيد من بناء الجملة الذي يستخدمه كاريل هو:
for(int i = 0; i < عد ; i++){
البيانات لتكرارها
}
دورة for جميع تفاصيل دورة for في وقت لاحق في الفصل. الآن يجب عليك قراءة هذا السطر كوسيلة للتعبير ، "كرر العبارات بين الأقواس المعقوفةعدمرات. "يمكننا استخدام هذا الجديد دورة for لوضع 42 مخروط ثانية عن طريق استبدالعدمع 42 ووضع الأمر putBeeper() داخل كتلة رمز دورة for . نحن ندعو الأوامر في كتلة رمز الجسم :
الكود أعلاه قابل للتحرير. حاول تغييره بحيث يضع فقط مخروط ثانية.
يعطي المثال السابق انطباعًا بأن دورة for يكرر سطرًا واحدًا من التعليمات البرمجية. ومع ذلك ، يمكن أن يكون دورة for (العبارات التي تتكرر) خطوط متعددة. فيما يلي مثال لبرنامج يضع مخروط في كل ركن من أركان العالم:
انتبه جيدًا للطريقة التي يتدفق بها البرنامج من خلال عبارات التحكم هذه. البرنامج run s من خلال مجموعة من الأوامر في الجسم دورة for واحد في وقت واحد. يكرر الجسم أربع مرات.
ربما يكون الجزء الأكثر تعقيدًا في كتابة دورة هو أنك تحتاج إلى حالة العالم في نهاية دورة ( postcondition ) أن تكون حالة صالحة في العالم لبداية دورة ( شرط مسبق ). في المثال أعلاه ، تتوافق الافتراضات. اوقات سعيدة. في بداية دورة ، يكون كاريل دائمًا على مربع مع عدم وجود مخروط s في الزاوية الفارغة التالية. ماذا لو حذفت انعكاسفلليسار في نهاية دورة ؟ كاريل في نهاية التكرار الأول لم يعد يفي بالافتراضات المقدمة حول كاريل مواجهة الزاوية الفارغة التالية. الكود قابل للتحرير. حاول حذف turnLeft(); أمر لمعرفة ما يحدث!
تقنياً ، يمكن أن يحتوي جسم دورة for على أي كود تدفق تحكم ، حتى دورة ثانية. فيما يلي مثال على دورة for يعيد استدعاء إحدى الطرق التي تحتوي أيضًا على دورة for . نحن نسمي هذا "المتداخلة" دورة . حاول قراءة البرنامج وفهم ما يفعله قبل جري :