المكتبة

Chapter 9: Loops & Iteration - The Art of Repetition

الفصل 9: الحلقات والتكرار - فن التكرار الذكي

العضلات التي تقوم بالعمل الشاق في الكود

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

هذا هو العمل اليدوي المتكرر. إنه ممل، غير فعال، ومليء بالأخطاء.

الآن، تخيل أن لديك آلة. تضع فيها الـ 1000 رسالة، تضغط زراً واحداً، وفي دقيقة واحدة، تكون كل الرسائل مختومة بدقة متناهية.

هذه الآلة هي الحلقة التكرارية (Loop) في عالم البرمجة. إنها الأداة التي تحولك من عامل يدوي إلى مهندس يقوم ببناء الآلات. إذا كانت الشروط (Conditionals) هي “عقل” برنامجك، فالحلقات هي “عضلاته” التي تقوم بكل الأعمال الشاقة بلا كلل أو ملل.

أنت لا تكتب الكود لتكرر نفسك. أنت تكتب الكود لتجعل الحاسوب يكرر المهام نيابة عنك. هذا المفهوم البسيط هو ما يفصل بين الهاوي والمحترف. استعد لتعلم كيفية بناء أولى “آلاتك” البرمجية.


1. نكهتان من التكرار: متى تعرف النهاية؟

في البرمجة، لا يوجد نوع واحد من التكرار يناسب كل السيناريوهات. تماماً كما تستخدم مفكاً مختلفاً لكل نوع من البراغي، ستستخدم نوعاً مختلفاً من الحلقات لكل نوع من المهام. النوعان الأساسيان هما for و while.

الاختيار بينهما يعتمد على سؤال واحد بسيط: “هل أعرف مسبقاً عدد المرات التي أحتاج فيها للتكرار؟”

حلقة for: التكرار المحدد

استخدمها عندما تعرف بالضبط كم مرة تريد تنفيذ الكود.

  • المثال الواقعي: لديك قائمة تسوق تحتوي على 10 عناصر. أنت تعرف أنك ستمر على كل عنصر مرة واحدة بالضبط.
  • الاستخدام البرمجي: المرور على كل عنصر في مصفوفة (Array)، أو تنفيذ مهمة لعدد معين من المرات (مثلاً، 100 مرة). إنها حلقة منظمة، يمكن التنبؤ بسلوكها، وآمنة نسبياً.

حلقة while: التكرار الشرطي

استخدمها عندما تريد أن يستمر الكود في التنفيذ طالما أن شرطاً معيناً ما زال صحيحاً. أنت لا تعرف متى سيتوقف، لكنك تعرف شرط التوقف.

  • المثال الواقعي: أنت تسخن الماء. لا تعرف كم دقيقة سيستغرق الأمر، لكنك ستستمر في التسخين طالما أن درجة حرارة الماء أقل من 100 درجة مئوية.
  • الاستخدام البرمجي: انتظار إدخال من المستخدم، معالجة بيانات من اتصال شبكي حتى ينقطع، أو في الألعاب، استمرار دوران حلقة اللعبة الرئيسية طالما أن اللاعب لم يضغط على “خروج”.

الفهم العميق لهذا الفرق البسيط يمنعك من ارتكاب أخطاء فادحة. اختيار الحلقة الخاطئة قد يؤدي إلى كود غير فعال، أو أسوأ من ذلك، كود لا يتوقف عن العمل أبداً.


2. الخطر الأعظم: فخ الحلقة اللانهائية

مع القوة الكبيرة تأتي مسؤولية كبيرة. الحلقات التكرارية تمنحك قوة هائلة لأتمتة المهام، لكنها تحمل في طياتها خطراً داهماً يقع فيه كل مبتدئ تقريباً: الحلقة اللانهائية (Infinite Loop).

الحلقة اللانهائية هي حلقة لا تصل أبداً إلى شرط توقفها. تستمر في الدوران إلى الأبد (أو حتى ينهار برنامجك أو نظام التشغيل). إنها مثل سيارة بلا مكابح تتجه نحو حافة الهاوية.

لماذا تحدث؟ تحدث عادةً في حلقات while عندما تنسى تحديث المتغير الذي يتم فحص شرط الحلقة بناءً عليه.

تخيل هذا السيناريو:

  1. عداد = 0
  2. while (عداد < 10):
  3. اطبع “مرحباً”
  4. (… أين تحديث العداد؟)

في هذا المثال، قيمة عداد ستبقى دائماً 0. الشرط 0 < 10 سيظل صحيحاً إلى الأبد. سيقوم البرنامج بطباعة “مرحباً” ملايين المرات في الثانية حتى تستهلك كل موارد الجهاز.

لماذا هذا مهم؟ لأن الحلقات هي أساس معالجة البيانات. عندما تريد عرض قائمة بالمنتجات، أو تحليل سجلات المستخدمين، أو رسم كل إطار في لعبة فيديو، فأنت تستخدم الحلقات. حلقة لانهائية واحدة في تطبيق ويب يمكن أن تشل الخادم بأكمله. في برنامج على حاسوبك، يمكن أن تجبرك على إعادة تشغيل الجهاز.

تجنب هذا الفخ هو أول علامة على نضجك كمبرمج. قبل كتابة أي حلقة while، اسأل نفسك: “ما هو الشيء الذي سيتغير داخل هذه الحلقة ليجعلها تتوقف في النهاية؟”. إذا لم تكن لديك إجابة واضحة، فأنت على وشك بناء قنبلة موقوتة.


3. تشريح الحلقة: الأجزاء الثلاثة الأساسية

لكي تكتب حلقات قوية وموثوقة، يجب أن تفهم مكوناتها الأساسية. معظم الحلقات، خاصة حلقات for، يمكن تفكيكها إلى ثلاثة أجزاء حيوية: التهيئة، الشرط، والتحديث.

  1. التهيئة (Initialization): هذا هو المكان الذي تنشئ فيه “عداد” الحلقة. يتم تنفيذه مرة واحدة فقط قبل بدء الحلقة. (مثال: let i = 0).
  2. الشرط (Condition): هذا هو “حارس البوابة”. قبل كل دورة، يتم فحص هذا الشرط. إذا كان صحيحاً (true)، يتم تنفيذ الكود داخل الحلقة. إذا كان خاطئاً (false)، تتوقف الحلقة فوراً. (مثال: i < 5).
  3. التحديث (Update): هذا هو الجزء الذي يضمن أن الحلقة لن تستمر إلى الأبد. يتم تنفيذه في نهاية كل دورة، ويقوم بتغيير متغير العداد ليقترب خطوة من شرط التوقف. (مثال: i++، والتي تعني i = i + 1).

مثال عملي بلغة JavaScript: لنفترض أن لدينا مصفوفة من الأسماء ونريد أن نرحب بكل شخص.

const names = ["أحمد", "فاطمة", "يوسف"];

// 1. التهيئة: نبدأ من العنصر الأول (index 0)
// 2. الشرط: نستمر طالما أننا لم نتجاوز عدد العناصر
// 3. التحديث: ننتقل إلى العنصر التالي في كل دورة
for (let i = 0; i < names.length; i++) {
  console.log("مرحباً يا " + names[i] + "!");
}

الناتج سيكون:

مرحباً يا أحمد!
مرحباً يا فاطمة!
مرحباً يا يوسف!

عندما تفكر في الحلقات بهذه الطريقة المنظمة، فإنك تحولها من مفهوم سحري إلى أداة هندسية دقيقة. أنت تعرف بالضبط كيف تبدأ، وكيف تستمر، والأهم من ذلك، كيف تتوقف.


4. الخلاصة: أنت الآن قائد الأتمتة

لقد تعلمت اليوم أحد أهم المفاهيم في البرمجة على الإطلاق. الحلقات التكرارية ليست مجرد جزء من بناء الجملة (Syntax)؛ إنها تغيير جذري في طريقة تفكيرك.

لقد انتقلت من التفكير كشخص ينفذ المهام، إلى التفكير كشخص يصمم الأنظمة التي تنفذ المهام.

  • أنت تعرف الآن أن for هي أداتك للتكرار المنظم والمحدد.
  • أنت تعرف أن while هي سلاحك لمواجهة التكرار غير المحدد، الذي يعتمد على حالة متغيرة.
  • والأهم من ذلك، أنت تعرف الآن كيف تتجنب الحلقة اللانهائية، الخطأ الذي يحول برنامجك القوي إلى قطعة خردة رقمية.

الحلقات هي التي تسمح لك بمعالجة ملايين السجلات في قاعدة بيانات، ورسم عوالم معقدة في الألعاب، وبناء واجهات مستخدم ديناميكية تتفاعل مع بيانات لا حصر لها. بدون إتقان الحلقات، سيبقى كودك ضعيفاً ومحدوداً.

الآن بعد أن أصبحت لديك “العضلات” اللازمة للقيام بالعمل الشاق، حان الوقت لتنظيم هذا العمل. كيف يمكنك تجميع الكود في وحدات قابلة لإعادة الاستخدام، بحيث لا تضطر إلى كتابة نفس المنطق مراراً وتكراراً؟

في الفصل القادم: سنتعمق في عالم الدوال (Functions) و النطاق (Scope). استعد لتعلم كيفية بناء أدواتك الخاصة.

×

إعدادات القراءة

الوضع الليلي
حجم الخط 20px
نوع الخط
×

فهرس الكتاب