١.١١ الحلقات التكرارية — الجزء الثاني¶
حلقة while¶
التمرين 1: اعرض الأعداد من 1 إلى 3 في وحدة التحكم.
for(var i=1;i<=3;i++){
console.log(i);
}
ستكون النتيجة:
1
2
3
التمرين 2: تأمّل الشيفرة التالية وقارنها بشيفرة التمرين 1 .
var i = 1;
while(i<=3){
console.log(i);
i++;
}
ستكون النتيجة:
1
2
3
لاحظ أن الشيفرة في التمرين 1 و التمرين 2 تحقق النتيجة نفسها.
كيف تعمل شيفرة التمرين الأول؟
-
نصرّح عن متغير العدّاد ونُسمّيه
i، ونُسنِد القيمة 1 إلىiليبدأ العدّ من 1. -
نستخدم
whileحلقةً تكرارية. استخدام حلقةwhileيشبه استخدام حلقةfor. -
نريد تكرار التعليمات ما دام
i<=3متحققًا. -
نفتح قوسًا معقوفًا
{ -
نكتب التعليمات التي نريد تكرارها
console.log(i). -
نزيد العدّاد بمقدار 1:
i++. ويمكننا أيضًا كتابةi=i+1. -
نغلق القوس المعقوف
}.
متى نستخدم while أو for؟¶
يمكنك الوصول إلى النتيجة نفسها باستخدام for أو while حلقةً تكرارية. الاختيار لك، لكن استخدام حلقة while قد يكون أنسب أحيانًا. لنستكشف أمثلة إضافية.
التمرين 3: تبدأ حرارة الغرفة من 25 وتنخفض درجتين كل ساعة. اعرض "The temperature is ..., I can handle it" ما دامت الحرارة أعلى من الصفر.
var temp = 25;
while(temp > 0){
console.log("The temperature is " + temp + ". I can handle it!");
temp=temp-2;
}
ستكون النتيجة:
The temperature is 25. I can handle it!
The temperature is 23. I can handle it!
The temperature is 21. I can handle it!
The temperature is 19. I can handle it!
The temperature is 17. I can handle it!
The temperature is 15. I can handle it!
The temperature is 13. I can handle it!
The temperature is 11. I can handle it!
The temperature is 9. I can handle it!
The temperature is 7. I can handle it!
The temperature is 5. I can handle it!
The temperature is 3. I can handle it!
The temperature is 1. I can handle it!
لاحظ أن: يمكنك تحقيق النتيجة نفسها باستخدام for .
var temp = 25;
for(temp; temp > 0; temp=temp-2){
console.log("The temperature is " + temp + ". I can handle it!");
}
التمرين 4: يستطيع المستخدم كتابة التعليقات ما دام مسجّلًا دخوله.
var isLoggedIn = false;
while(isLoggedIn){
console.log("He can comment");
}
لاحظ أن isLoggedIn قيمته false. لو كانت true ولم تتغيّر، فسيظل الشرط متحققًا وندخل حلقة لا نهائية تُعلّق البرنامج. يمكن الخروج منها باستخدام break . لنرَ كيف!
عبارة break¶
التمرين 5: اعرض "He can comment" إذا كان المستخدم مسجّلًا دخوله، ثم اخرج من حلقة while .
var isLoggedIn = true;
while(isLoggedIn){
console.log("He can comment");
break;
}
ستحصل على: He can comment.
ماذا تفعل break ؟
تُخرجنا من حلقة while أو أي حلقة أخرى. لنستخدم break مع حلقة for!
التمرين 6 أضف 2 إلى كل عدد من 1 إلى 6. إذا كان العدد + 5 أكبر من 7، فاخرج من الحلقة.
for(var num = 1; num<=6; num++){
if((num + 5) > 7){
break;
}
console.log(num+2);
}
ستكون النتيجة:
3
4
لنفهم ذلك!
-
أنشأنا حلقة بسيطة من نوع
for.for(var num = 1; num<=6; num++). -
إذا كان العدّاد + 5 أكبر من 7، فاخرج من الحلقة.
-
وإلا فاعرض العدّاد + 2 في وحدة التحكم.
-
في الدورة الأولى، قيمة
numهي 1، و1 + 5 = 66 أقل من 7، لذا يظهر 1 + 2، أي 3. -
في الدورة الثانية، قيمة
numهي 2، و2 + 5 = 77 ليست أكبر من 7، لذا يظهر 2 + 2، أي 4. -
في الدورة الثالثة، قيمة
numهي 3، و3 + 5 = 88 أكبر من 7، لذا نخرج من الحلقة.
التمرين 7: صرّح عن المتغير count وأسند القيمة 5 إلى count. اعرض العدّاد في وحدة التحكم ما دامت قيمته غير صفرية.
var count = 5;
while(count){
console.log("Count: " + count);
count--;
}
ستكون النتيجة:
Count: 5
Count: 4
Count: 3
Count: 2
Count: 1
ملاحظة (١): Task 7 يشبه task 3، لكننا استخدمنا أسلوبًا مختلفًا في Task 7. بدلًا من اختبار الشرط count > 0، نختبر count نفسه. ما دام العدّاد غير صفري، يُعامل كقيمة صادقة. وعندما يصل إلى الصفر، تكون قيمة العبارة while(0) هي while(false)، فلا تُنفّذ التعليمات.
التمرين 8: اعرض "Please provide us with your password" ما دام المستخدم لم يُدخل كلمة المرور.
var password = "123";
while(!password){
console.log("Please provide us with your password");
}
لن تظهر أي نتيجة هنا.
تحذير: إذا كانت كلمة المرور سلسلة فارغة أو null أو undefined، فستدخل هذه الشيفرة حلقة لا نهائية؛ فهي لا تُحدّث كلمة المرور داخل الحلقة. في برنامج فعلي يجب تغيير القيمة أو الخروج من الحلقة، وإلا سيتعطّل تفاعل الصفحة.
ملاحظة (٢): يُفضّل استخدام حلقة while حين لا نعرف عدد مرات التكرار مسبقًا. مثلًا في التمرين 8لا نعرف متى سيُدخل المستخدم كلمة المرور. يصعب التعبير عن ذلك بحلقة for ذات عدّاد محدّد.