0 من 15 يومًا نسبة الإنجاز: 0%
الأسبوع الثاني - اليوم السادس

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

⏱ ساعة واحدة ⚙ نظري وعملي
مخرجات التعلم
  • التمييز بين الحلقات التكرارية المحدودة ("كرِّر") واللانهائية ("كرِّر باستمرار").
  • تقليل تكرار الأكواد البرمجية عن طريق استبدال اللبنات المتكررة بالحلقات.
  • تطبيق الحلقات التكرارية لتنفيذ المهام بشكل موثوق وفعّال.
  • تداخل الحلقات (Nesting) لإنشاء أنماط تكرار هندسية ومنطقية معقدة.

1. التفريق بين الحلقات المحدودة واللانهائية

الحلقة التكرارية (Loop) هي بنية برمجية تقوم بتكرار مقطع برمجي أو مجموعة من اللبنات عدة مرات. تُعد الحلقات من أقوى المفاهيم في علوم الحاسب. في سكراتش، ستجد لبنات الحلقات التكرارية بلونها البرتقالي ضمن فئة "التحكم" (Control):

  • الحلقات المحدودة (كرِّر N مرة): تقوم هذه اللبنة بتكرار اللبنات الموجودة بداخلها لعدد محدد ومعين من المرات (على سبيل المثال، كرر 10 مرات). بمجرد انتهاء العدد، تتوقف الحلقة تلقائياً، وينتقل البرنامج لتنفيذ اللبنات الموجودة أسفلها.
  • الحلقات اللانهائية (كرِّر باستمرار): تقوم هذه اللبنة بتكرار الأوامر الموجودة بداخلها بشكل مستمر دون توقف. لا توجد طريقة للخروج من هذه الحلقة إلا بإيقاف المشروع بالكامل أو باستخدام لبنة "أوقف الكل". تُستخدم هذه الحلقات عادةً لإدارة آليات اللعب (Game Loops)، التحكم في الحركة، والمراقبة المستمرة للأحداث.

تُعد الحلقات المحدودة مثالية عندما يكون عدد التكرارات معروفاً مسبقاً، مثل برمجة دورة مشي لشخصية تتكون من 10 خطوات. أما الحلقات اللانهائية، فهي بمثابة "القلب النابض" للألعاب، حيث تعمل على مراقبة مدخلات المستخدم أو التحقق من الاصطدام بشكل مستمر منذ بداية اللعبة وحتى خروج اللاعب.

Finite Repeat Loop Flowchart
الشكل 6.1: مخطط انسيابي يوضح آلية عمل الحلقة المحدودة (كرِّر لعدد معين من المرات).

2. تقليل تكرار الأكواد البرمجية

يحدث تكرار الكود عندما تقوم بكتابة أو سحب نفس اللبنات البرمجية بشكل متكرر. على سبيل المثال، وضع لبنتي تحرك 10 خطوة و انتظر 0.1 ثانية وتكرارهما يدوياً عشر مرات سيؤدي إلى إنشاء مقطع برمجي طويل جداً وصعب القراءة. استبدال هذا العمود الطويل من اللبنات بوضعها داخل حلقة واحدة كرِّر (10) مرة سيجعل برنامجك أقصر، أنظف، وأسهل بكثير في اكتشاف الأخطاء وتعديلها.

من خلال تجميع اللبنات المتكررة داخل حلقة، فإنك تطبق المبدأ البرمجي الشهير DRY (لا تكرر نفسك - Don't Repeat Yourself). إذا قررت لاحقاً تغيير المسافة من 10 خطوات إلى 15 خطوة، ستحتاج فقط لتعديل قيمة واحدة داخل الحلقة، بدلاً من تعديل 10 لبنات مفردة.

Infinite Forever Loop Flowchart
الشكل 6.2: مخطط انسيابي يوضح آلية عمل الحلقة اللانهائية (كرِّر باستمرار).

3. استخدام الحلقات لتنفيذ المهام بفعالية

تضمن الحلقات التكرارية عمل الإجراءات بشكل موثوق وسلس. على سبيل المثال، إذا أردت أن يرفرف كائن "الطائر" بجناحيه باستمرار، فإن وضع لبنة "المظهر التالي" داخل حلقة كرِّر باستمرار يضمن تشغيل الحركة التلقائية بكل سهولة. هذا النهج أكثر كفاءة واحترافية من محاولة تفعيل الحدث يدوياً لكل حركة رفرفة.

استخدام الحلقات يضمن أيضاً دقة التوقيت. يقوم الحاسوب بتشغيل كل دورة تكرار بمعدل ثابت ودقيق، مما يحافظ على سلاسة الرسوم المتحركة في لعبتك ويمنع التقطيع أو التباطؤ، مما يُحسن من أداء المشروع الكلي.

Nested Loops Concept Map
الشكل 6.3: مخطط يوضح مفهوم الحلقات المتداخلة وتوزيع الأدوار بين الحلقة الخارجية والحلقة الداخلية.

4. تداخل الحلقات لإنشاء أنماط معقدة

التداخل (Nesting) يعني وضع حلقة تكرارية داخل حلقة تكرارية أخرى. عندما تتداخل الحلقات، يدخل الحاسوب إلى الحلقة الخارجية أولاً، ثم ينتقل إلى الحلقة الداخلية ويقوم بتنفيذها بالكامل حتى تنتهي. بعد ذلك يخرج للحلقة الخارجية، يتقدم خطوة واحدة فيها، ثم يعيد الدورة من جديد. يُستخدم هذا المفهوم بشكل واسع لرسم الأشكال الهندسية المعقدة، تصميم الشبكات (Grids)، أو إدارة الحالات المعقدة في الألعاب.

على سبيل المثال، إذا قمت بوضع حلقة كرِّر (10) مرة بداخل حلقة كرِّر (3) مرات، فإن الأكواد الموجودة في الحلقة الداخلية سيتم تنفيذها 30 مرة إجمالاً (3 × 10). هذا الهيكل ممتاز جداً لبرمجة كائن يقوم برسم أنماط دائرية أو إنشاء شبكات من المكعبات في ألعاب الأركيد.

نشاط عملي

تطبيق عملي: الرسام الهندسي (الحلقات المتداخلة)

  1. أضف كائن "القلم" (Pencil) من المكتبة، ثم قم بإضافة "إضافة القلم" (Pen Extension) بالضغط على زر "إدراج إضافة" الموجود أسفل يمين واجهة سكراتش.
  2. قم بإنشاء مقطع التهيئة البرمجي: "عند النقر على العلم الأخضر"، أضف لبنات: امسح الكل، ارفع القلم، اجعل لون القلم أزرق، اجعل حجم القلم مساوياً 2، اذهب إلى الموضع س: 0 ص: 0، ثم أنزل القلم.
  3. اسحب لبنة الحلقة المحدودة كرِّر (36) مرة وضعها أسفل المقطع. هذه هي حلقتك الخارجية.
  4. بداخل هذه الحلقة الخارجية، ضع حلقة داخلية: كرِّر (10) مرات.
  5. بداخل الحلقة الداخلية، أضف الأوامر التالية بالترتيب: تحرك 10 خطوة، استدر يميناً 10 درجة، غيّر لون القلم بمقدار 10.
  6. خارج الحلقة الداخلية (ولكن لا تزال بداخل الحلقة الخارجية)، أضف أمر الدوران للنمط الرئيسي: استدر يميناً 15 درجة.
شرح المقطع البرمجي النموذجي
  1. تهيئة القلم: [عند النقر على العلم الأخضر] -> [امسح الكل] -> [ارفع القلم] -> [اذهب إلى الموضع س: (0) ص: (0)] -> [أنزل القلم] (من فئة القلم).
  2. إعداد الحلقة الخارجية: [كرِّر (36) مرة] (من فئة التحكم).
  3. تداخل الحلقة الداخلية: بداخل الحلقة الخارجية ضع -> [كرِّر (10) مرات] (من فئة التحكم).
  4. أوامر الرسم (داخل الحلقة الداخلية): [تحرك (10) خطوة] -> [استدر يميناً (10) درجة] -> [غيّر لون القلم بمقدار (10)] (من فئة القلم).
  5. دوران النمط الرئيسي (داخل الحلقة الخارجية فقط): أسفل الحلقة الداخلية مباشرةً أضف -> [استدر يميناً (15) درجة].
  6. قم بتشغيل المشروع لترى القلم وهو يقوم برسم شكل هندسي دائري معقد وملون باستخدام القوة الرياضية للحلقات المتداخلة!