حلقة while
في for كانت البداية والشرط والتحديث مجتمعة في رأس واحد. أحياناً تعرف فقط قاعدة «تابع ما دام هذا صحيحاً» — والعدّاد يتغيّر وسط العمل نفسه. while يفحص شرطاً واحداً أولاً، ينفّذ الجسم، ثم يفحص من جديد. نفس فكرة التكرار؛ شكل مختلف على الصفحة.
كيف تتقدّم حلقة while؟
ما دام الشرط داخل الأقواس صحيحاً تُعاد كتلة { }. لا يوجد في الرأس مكان منفصل للبداية أو التحديث. تجهّز المتغيرات قبل الحلقة وتغيّرها داخل الجسم حتى يصبح الشرط خاطئاً. حينها تتوقف الحلقة ويكمل البرنامج من السطر التالي.
while و for و do...while بنظرة واحدة
📊 أشكال الحلقات اليومية
| الشكل | متى يناسب | فحص الشرط |
|---|---|---|
while |
تابع ما دامت قاعدة قائمة؛ التحديث داخل الجسم | قبل كل جولة |
for |
تعرف من البداية البداية والتوقف والخطوة | قبل كل جولة (رأس بثلاثة أجزاء) |
do...while |
يجب أن يُنفَّذ الجسم مرة واحدة على الأقل | بعد كل جولة |
أمثلة المبتدئ لـ while ما زالت غالباً بعدّاد صغير. الفرق في المكان: تكتب let i = 0 قبل الحلقة وi++ (أو تغييراً آخر) داخل الأقواس. إن لم تغيّر ما يقرأه الشرط فقد لا تنتهي الحلقة أبداً.
let i = 0;
while (i < 5) {
console.log(i);
i++;
}
عُدّ بـ while
يبدأ i من 0 قبل الحلقة. كل جولة تطبعه ثم تضيف واحداً. ترى 0 إلى 4 — خمس جولات. القيمة 5 لا تُطبع لأن الشرط يفشل أولاً. بلا i++ داخل الجسم يبقى i على 0 إلى الأبد.
اقرأ جولة واحدة بهدوء: شرط → جسم (مع التحديث) → شرط من جديد. لذلك نسيان التحديث هو فخ الحلقة اللانهائية الكلاسيكي مع while.
let n = 1;
while (n <= 3) {
console.log("step " + n);
n++;
}
ابدأ من واحد بتسمية أوضح
هنا العدّاد من 1 والشرط n <= 3؛ فترى step 1 ثم step 2 ثم step 3. البدء من صفر أو واحد اختيار تصميم — فقط اجعل الشرط يطابق اختيارك، كما مع for.
let total = 0;
let k = 1;
while (k <= 4) {
total = total + k;
k++;
}
console.log(total);
ابنِ المجموع جولة بعد جولة
يبدأ total من صفر. كل جولة تضيف k الحالي ثم تقدّم k. بعد 1+2+3+4 يصبح 10. النتيجة النامية خارج الحلقة؛ العدّاد الذي يحرّك الشرط بجانبها.
let left = 3;
while (left > 0) {
console.log("left=" + left);
left--;
}
console.log("done");
عُدّ تنازلياً حتى التوقف
ليست كل الحلقات تصعد فقط. هذه تطبع left=3 ثم left=2 ثم left=1 ثم done. إنقاص العدّاد تحديث صادق أيضاً — أي تغيير يقود نحو إنهاء الحلقة مناسب.
let x = 0;
do {
console.log("tick " + x);
x++;
} while (x < 1);
console.log("after=" + x);
do...while ينفّذ الجسم أولاً
do...while ينفّذ الجسم مرة، ثم يفحص الشرط. حتى لو كان الشرط خاطئاً من البداية لـ while عادي، الجولة الأولى تحدث. هنا ترى tick 0 ثم after=1. استخدمه حين تناسب القصة «جرّب مرة، ثم كرّر إن لزم».
اعرض نتيجة while على الصفحة
نفّذ عدّاً قصيراً بـ while، ابنِ رسالة، ثم اكتبها في الصفحة.
<!DOCTYPE html>
<html>
<head>
<title>While — page count</title>
</head>
<body>
<p id="out">…</p>
<script>
let msg = "";
let i = 1;
while (i <= 4) {
msg = msg + i + " ";
i++;
}
let box = document.getElementById("out");
box.textContent = "count=" + msg.trim();
</script>
</body>
</html>
تعرض الصفحة count=1 2 3 4. غيّر الحد الأعلى، حدّث الصفحة، واقرأ القائمة الجديدة. فضّل for حين تكون الخطة الثلاثية واضحة مسبقاً؛ وفضّل while حين قاعدة التوقف شرط واحد أوضح والتحديث داخل الجسم. الدرس التالي يمشي على القيم والمفاتيح بـ for...of وfor...in.
جرّبها بنفسك
- اكتب
whileيسجّل0…4معi < 5وi++داخل الجسم. - غيّره ليسجّل
1…5معi <= 5. - اجمع
1…5فيtotalبـwhileوسجّل النتيجة. - عُدّ تنازلياً من
5إلى1ثم سجّلdone. - اكتب
do...whileيطبع سطراً حتى لو بدأ الشرط خاطئاً. - في عرض HTML غيّر الحد الأعلى فقط، حدّث الصفحة، واقرأ
count=.
أخطاء شائعة
- نسيان تحديث الجسم فيبقى الشرط صحيحاً دائماً (حلقة لانهائية)
- خطأ بواحد:
i < 5بدلi <= 5(أو العكس) - اختيار
do...whileحين تريد حقاً إمكانية صفر جولات - وضع التحديث في مكان خاطئ أو تغيير متغيّر غير الذي يقرأه الشرط
whileطويل حين يكون رأسforأوضح للقراءة
خلاصة
whileيكرّر الكتلة ما دام الشرط صحيحاً- جهّز المتغيرات قبل الحلقة؛ حدّثها داخل الجسم
- ممتازة للعدّ والجمع والعدّ التنازلي
do...whileينفّذ الجسم مرة على الأقل ثم يفحص- فضّل
forحين البداية/التوقف/الخطوة واضحة؛ وwhileلقاعدة جارية واحدة - التالي: for...of و for...in — المشي على القيم والمفاتيح
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى