الحلقات في JavaScript: for و while
تخيّل أن معلمك طلب منك أن تكتب جملة «لن أتحدث في الفصل» مئة مرة. ستتعب يدك! الكمبيوتر لا يتعب أبداً، ويستطيع تكرار أي أمر آلاف المرات في جزء من الثانية. في هذا الدرس ستتعلم الحلقات (Loops): كيف تكرر الكود باستخدام for و while، وكيف توقف التكرار أو تتخطى جزءاً منه.
حلقة for
Section titled “حلقة for”استخدم for عندما تعرف عدد مرات التكرار مسبقاً:
for (let i = 1; i <= 5; i++) { console.log("الدورة رقم", i);}الدورة رقم 1الدورة رقم 2الدورة رقم 3الدورة رقم 4الدورة رقم 5بين القوسين ثلاثة أجزاء تفصلها فواصل منقوطة:
- البداية
let i = 1: ننشئ عدّاداً اسمهiيبدأ من 1. يُنفّذ مرة واحدة فقط. - الشرط
i <= 5: يُفحص قبل كل دورة. إذا كان صحيحاً تُنفّذ الدورة، وإذا أصبح خاطئاً تتوقف الحلقة. - الخطوة
i++: تُنفّذ بعد كل دورة، فتزيد العدّاد واحداً.
الأمر يشبه العدّاد في صالة الألعاب الرياضية: تبدأ من 1، وبعد كل تمرين تزيد العدد، وتتوقف عندما تصل إلى الرقم المطلوب.
العد التنازلي
Section titled “العد التنازلي”يمكنك أن تعدّ للخلف بتغيير البداية والشرط والخطوة:
for (let i = 3; i >= 1; i--) { console.log(i);}console.log("انطلق!");321انطلق!حلقة تجمع الأرقام
Section titled “حلقة تجمع الأرقام”هنا قوة الحلقات الحقيقية. اجمع كل الأرقام من 1 إلى 100 في ثلاثة أسطر:
let sum = 0;for (let i = 1; i <= 100; i++) { sum += i;}console.log(sum);5050وهذا جدول ضرب العدد 7:
const num = 7;for (let i = 1; i <= 5; i++) { console.log(`${num} × ${i} = ${num * i}`);}7 × 1 = 77 × 2 = 147 × 3 = 217 × 4 = 287 × 5 = 35المرور على حروف نص
Section titled “المرور على حروف نص”تذكّر أن حروف النص مرقّمة من صفر. الحلقة تمر عليها واحداً تلو الآخر:
const word = "كود";for (let i = 0; i < word.length; i++) { console.log(`الحرف ${i + 1}: ${word[i]}`);}الحرف 1: كالحرف 2: والحرف 3: دحلقة while
Section titled “حلقة while”استخدم while عندما لا تعرف عدد المرات مسبقاً، وتريد التكرار ما دام شرط ما صحيحاً. كلمة while تعني «طالما»:
let balance = 100;let days = 0;
while (balance > 0) { balance -= 30; days++;}console.log(`نفدت النقود بعد ${days} أيام`);نفدت النقود بعد 4 أياممعك 100 جنيه وتصرف 30 كل يوم. لا نعرف مسبقاً كم يوماً ستكفي، فالحلقة تستمر «طالما» الرصيد أكبر من صفر.
do…while: نفّذ مرة على الأقل
Section titled “do…while: نفّذ مرة على الأقل”حلقة do...while تنفّذ الكود أولاً ثم تفحص الشرط، لذلك تعمل مرة واحدة على الأقل حتى لو كان الشرط خاطئاً من البداية:
let n = 10;do { console.log("نُفّذت مرة واحدة على الأقل");} while (n < 5);نُفّذت مرة واحدة على الأقلالتحكم في الحلقة: break و continue
Section titled “التحكم في الحلقة: break و continue”breakتوقف الحلقة كلها فوراً، مثل الخروج من السباق.continueتتخطى الدورة الحالية فقط وتنتقل للتي بعدها، مثل تخطي أغنية في قائمة التشغيل.
for (let i = 1; i <= 10; i++) { if (i % 2 === 0) continue; // تخطَّ الأرقام الزوجية if (i > 7) break; // توقف بعد 7 console.log(i);}1357جرّب بنفسك
Section titled “جرّب بنفسك”اطبع جدول ضرب أي رقم تختاره. غيّر num و limit، ثم حاول أن تجعل الحلقة تطبع النتائج الزوجية فقط باستخدام continue:
الناتج
أخطاء شائعة
Section titled “أخطاء شائعة”- الخطأ بواحد (Off-by-one): كتابة
i < 5بدلاً منi <= 5تجعل الحلقة تعمل 4 مرات فقط. فكّر جيداً: هل تريد أن يدخل الرقم الأخير أم لا؟ - نسيان تغيير متغير الشرط في while: يسبب حلقة لا نهائية.
- وضع فاصلة منقوطة بعد القوس:
for (let i = 0; i < 5; i++);تجعل الحلقة فارغة، ويُنفّذ ما بعدها مرة واحدة فقط.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
كم مرة تُنفّذ الحلقة for (let i = 0; i < 3; i++)؟
i تأخذ القيم 0 و 1 و 2، وعندما تصبح 3 يصبح الشرط i < 3 خاطئاً فتتوقف.
سؤال
ما الفرق بين break و continue؟
break خروج نهائي من الحلقة، أما continue فتقفز إلى الدورة التالية.
الخلاصة
Section titled “الخلاصة”forعندما تعرف عدد التكرارات: بداية، وشرط، وخطوة.whileعندما تكرر «طالما» الشرط صحيح ولا تعرف العدد مسبقاً.do...whileتنفّذ مرة واحدة على الأقل قبل فحص الشرط.breakتوقف الحلقة، وcontinueتتخطى دورة واحدة.- تأكد دائماً أن الحلقة ستنتهي لتتجنب الحلقة اللانهائية.