الحلقات التكرارية (Loops): For مقابل While
الحلقات التكرارية هي أحد أهم المفاهيم في البرمجة. تسمح لك بتنفيذ نفس الكود عدة مرات دون الحاجة لكتابته مرة تلو الأخرى. هذا الدليل سيساعدك على فهم الفرق بين حلقات For و While ومتى تستخدم كل منها.
ما هي الحلقات التكرارية؟
الحلقة التكرارية (Loop) هي هيكل برمجي يسمح بتنفيذ مجموعة من الأوامر عدة مرات. بدلاً من كتابة نفس الكود مئات المرات، يمكنك استخدام حلقة واحدة.
مثال بسيط:
// بدلاً من كتابة هذا 5 مرات
console.log("مرحباً");
console.log("مرحباً");
console.log("مرحباً");
console.log("مرحباً");
console.log("مرحباً");
// استخدم حلقة واحدة
for (let i = 0; i < 5; i++) {
console.log("مرحباً");
}
أنواع الحلقات التكرارية:
🔄 For Loop
عندما تعرف عدد التكرارات مسبقاً
⏳ While Loop
عندما تعتمد على شرط معين
🔄 Do-While Loop
تنفيذ الحلقة مرة واحدة على الأقل
📋 For-In / For-Of
للتنقل عبر المصفوفات والكائنات
حلقة For - عندما تعرف العدد:
البنية الأساسية:
for (التهيئة; الشرط; التحديث) {
// الكود المراد تنفيذه
}
أمثلة عملية:
// طباعة الأرقام من 1 إلى 5
for (let i = 1; i <= 5; i++) {
console.log("الرقم:", i);
}
// طباعة الأرقام الزوجية
for (let i = 2; i <= 10; i += 2) {
console.log("رقم زوجي:", i);
}
// العد التنازلي
for (let i = 5; i >= 1; i--) {
console.log("العد التنازلي:", i);
}
مثال مع المصفوفات:
let fruits = ["تفاح", "موز", "برتقال", "فراولة"];
// طباعة جميع الفواكه
for (let i = 0; i < fruits.length; i++) {
console.log("فاكهة:", fruits[i]);
}
// طباعة الفواكه مع الفهرس
for (let i = 0; i < fruits.length; i++) {
console.log(`${i + 1}. ${fruits[i]}`);
}
حلقة While - عندما تعتمد على شرط:
البنية الأساسية:
while (الشرط) {
// الكود المراد تنفيذه
// تحديث المتغيرات
}
أمثلة عملية:
// العد حتى 5
let count = 1;
while (count <= 5) {
console.log("العدد:", count);
count++;
}
// قراءة المدخلات حتى إدخال "خروج"
let input = "";
while (input !== "خروج") {
input = prompt("أدخل نص (اكتب 'خروج' للإنهاء):");
if (input !== "خروج") {
console.log("أدخلت:", input);
}
}
// البحث عن رقم في مصفوفة
let numbers = [1, 3, 5, 7, 9, 11, 13];
let index = 0;
let found = false;
while (index < numbers.length && !found) {
if (numbers[index] === 7) {
found = true;
console.log("تم العثور على الرقم 7 في الفهرس:", index);
}
index++;
}
حلقة Do-While - تنفيذ مرة واحدة على الأقل:
البنية الأساسية:
do {
// الكود المراد تنفيذه
} while (الشرط);
مثال عملي:
// لعبة تخمين الرقم
let secretNumber = 7;
let guess;
let attempts = 0;
do {
guess = parseInt(prompt("خمن الرقم (1-10):"));
attempts++;
if (guess < secretNumber) {
console.log("الرقم أكبر!");
} else if (guess > secretNumber) {
console.log("الرقم أصغر!");
} else {
console.log(`مبروك! لقد خمنت الرقم في ${attempts} محاولة`);
}
} while (guess !== secretNumber);
متى تستخدم For مقابل While؟
🔄 استخدم For عندما:
- تعرف عدد التكرارات مسبقاً
- تريد التنقل عبر مصفوفة
- تحتاج للتحكم في الخطوة (step)
- تريد كود أكثر وضوحاً
// مثال: طباعة جدول الضرب
for (let i = 1; i <= 10; i++) {
console.log(`5 × ${i} = ${5 * i}`);
}
⏳ استخدم While عندما:
- لا تعرف عدد التكرارات مسبقاً
- تعتمد على شرط خارجي
- تريد التحقق من شرط قبل التنفيذ
- تتعامل مع مدخلات المستخدم
// مثال: قراءة الملفات حتى النهاية
let line;
while ((line = readLine()) !== null) {
console.log("سطر:", line);
}
الحلقات المتقدمة:
For-In (للتنقل عبر الكائنات):
let person = {
name: "أحمد",
age: 25,
city: "القاهرة"
};
for (let key in person) {
console.log(`${key}: ${person[key]}`);
}
For-Of (للتنقل عبر المصفوفات):
let colors = ["أحمر", "أخضر", "أزرق", "أصفر"];
for (let color of colors) {
console.log("اللون:", color);
}
// مع الفهرس
for (let [index, color] of colors.entries()) {
console.log(`${index}: ${color}`);
}
التحكم في الحلقات:
Break - إيقاف الحلقة:
// البحث عن رقم في مصفوفة
let numbers = [1, 3, 5, 7, 9, 11];
let target = 7;
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] === target) {
console.log("تم العثور على الرقم في الفهرس:", i);
break; // إيقاف الحلقة
}
}
Continue - تخطي التكرار الحالي:
// طباعة الأرقام الفردية فقط
for (let i = 1; i <= 10; i++) {
if (i % 2 === 0) {
continue; // تخطي الأرقام الزوجية
}
console.log("رقم فردي:", i);
}
الحلقات المتداخلة (Nested Loops):
مثال: جدول الضرب:
// طباعة جدول الضرب من 1 إلى 5
for (let i = 1; i <= 5; i++) {
for (let j = 1; j <= 5; j++) {
console.log(`${i} × ${j} = ${i * j}`);
}
console.log("---"); // فاصل بين الجداول
}
مثال: نمط النجوم:
// طباعة مثلث من النجوم
let rows = 5;
for (let i = 1; i <= rows; i++) {
let stars = "";
for (let j = 1; j <= i; j++) {
stars += "*";
}
console.log(stars);
}
أفضل الممارسات:
✅ نصائح مهمة:
- تأكد من تحديث متغيرات الحلقة
- تجنب الحلقات اللانهائية
- استخدم أسماء متغيرات واضحة
- اختبر الحلقات مع قيم مختلفة
- استخدم break و continue بحذر
❌ أخطاء شائعة:
// ❌ حلقة لانهائية
let i = 0;
while (i < 5) {
console.log(i);
// نسيان i++ يسبب حلقة لانهائية
}
// ✅ صحيح
let i = 0;
while (i < 5) {
console.log(i);
i++; // تحديث المتغير
}
مشاريع تطبيقية:
🎲 لعبة الروليت:
let attempts = 0;
let maxAttempts = 3;
let secretNumber = Math.floor(Math.random() * 10) + 1;
while (attempts < maxAttempts) {
let guess = parseInt(prompt("خمن الرقم (1-10):"));
attempts++;
if (guess === secretNumber) {
console.log("مبروك! لقد فزت!");
break;
} else if (attempts === maxAttempts) {
console.log("انتهت المحاولات. الرقم الصحيح كان:", secretNumber);
} else {
console.log("خطأ! حاول مرة أخرى");
}
}
📊 آلة حاسبة الإحصاء:
let numbers = [];
let sum = 0;
// جمع الأرقام
for (let i = 1; i <= 5; i++) {
let num = parseFloat(prompt(`أدخل الرقم ${i}:`));
numbers.push(num);
sum += num;
}
// حساب المتوسط
let average = sum / numbers.length;
// إيجاد الأكبر والأصغر
let max = numbers[0];
let min = numbers[0];
for (let num of numbers) {
if (num > max) max = num;
if (num < min) min = num;
}
console.log("المجموع:", sum);
console.log("المتوسط:", average);
console.log("الأكبر:", max);
console.log("الأصغر:", min);
الخطوات التالية:
- تعلم الشروط (If/Else)
- فهم المصفوفات (Arrays)
- تعلم الدوال (Functions)
- ممارسة الحلقات المتداخلة
- بناء مشاريع أكثر تعقيداً
الحلقات التكرارية هي أداة قوية في البرمجة. ابدأ في استخدامها اليوم!
تعلم البرمجة معنا