while loop

while (condition) {
  // الكود الذي يتكرر تنفيذه طالما الشرط صحيح
}
Dart
طبيعة عملها:
  1. يتم تقييم الشرط أولاً قبل كل تكرار
  2. إذا كان الشرط true، يتم تنفيذ الكود داخل الحلقة
  3. بعد تنفيذ الكود، يعود لتقييم الشرط مرة أخرى
  4. تتوقف الحلقة عندما يصبح الشرط false

مثال أساسي:

int counter = 0;

while (counter < 5) {
  print('التكرار رقم $counter');
  counter++;
}
------------------
التكرار رقم 0
التكرار رقم 1
التكرار رقم 2
التكرار رقم 3
التكرار رقم 4
Dart
2. الفرق بين while و for
المعيارwhilefor
التهيئةعادة خارج الحلقةداخل تعريف الحلقة (مباشرة)
الشرطداخل شرط الحلقة (دائمًا)في جزء من تعريف الحلقة
التحديثعادة داخل جسم الحلقة يدويًايكون محددًا في تعريف الحلقة
أفضل استخدامعندما لا تعرف عدد التكرارات مقدماًعندما تعرف عدد التكرارات مقدماً

3. أنواع حلقة while
أ. while العادية

bool isRunning = true;
while (isRunning) {
  print('التطبيق يعمل');
  // في مكان ما سيتم تغيير isRunning لـ false
}
Dart

ب. while مع break

int x = 0;
while (true) { // حلقة لا نهائية ظاهرياً
  print(x);
  x++;
  if (x >= 5) {
    break; // يخرج من الحلقة عندما يصبح x = 5
  }
}
Dart

ج. while مع continue

int i = 0;
while (i < 5) {
  i++;
  if (i == 3) {
    continue; // يتخطى التكرار الحالي
  }
  print(i);
}
-----------------
1
2
4
5
Dart

4. أمثلة تطبيقية متنوعة

void main() {
  int number = 1;

  while (true) {
    if (number % 7 == 0 && number % 5 == 0) {
      print('أول عدد يقبل القسمة على 7 و 5 هو: $number');
      break; // نوقف الحلقة عند تحقق الشرط
    }
    number++;
  }
}
Dart

أ. حلقة do-while

do {
  // الكود ينفذ مرة واحدة على الأقل
} while (condition);
Dart

مثال:

int attempts = 0;
do {
  print('محاولة رقم ${attempts + 1}');
  attempts++;
} while (attempts < 3);
Dart

مثال2:

  int i = 1;

  do {
    print('العدد: $i');
    i++;
  } while (i <= 5);
Dart

🟢 الشرح:
يبدأ من 1 ويطبع الأعداد حتى 5.
ينفذ الكود أولًا ثم يتحقق من الشرط.

✅ 2. البحث عن أول عدد زوجي أكبر من 10

void main() {
  int num = 11;

  do {
    if (num % 2 == 0) {
      print('أول عدد زوجي أكبر من 10 هو: $num');
      break;
    }
    num++;
  } while (true);
}
Dart

🟢 الشرح:
يبدأ من 11 ويزيد حتى يجد عددًا يقبل القسمة على 2.

✅ 3. التكرار حتى يصل المجموع إلى 100
void main() {
  int sum = 0;
  int num = 1;

  do {
    sum += num;
    num++;
  } while (sum < 100);

  print('وصل المجموع إلى: $sum');
}
Dart

🟢 الشرح:
يجمع الأعداد من 1 فصاعدًا حتى يصل المجموع إلى 100 أو أكثر.

✅ 4. تكرار تنفيذ عملية لمرة واحدة فقط
 int x = 10;

  do {
    print('سيتم تنفيذ هذا السطر مرة واحدة على الأقل');
  } while (x < 0);
Dart

🟢 الشرح:
رغم أن الشرط x < 0 غير صحيح، سيتم تنفيذ الحلقة مرة واحدة على الأقل.

✅ 5. طباعة جدول الضرب للعدد 3
void main() {
  int i = 1;

  do {
    print('3 × $i = ${3 * i}');
    i++;
  } while (i <= 10);
}
Dart
ج. التحسينات والأداء
  • تجنب الحسابات المعقدة في شرط while
  • احرص على تحديث متغير الشرط داخل الحلقة
  • استخدم break عند وجود شروط خروج متعددة
6. نصائح ومحاذير
  1. تجنب الحلقات اللانهائية: تأكد من وجود آلية لإيقاف الحلقة
  2. تهيئة المتغيرات جيداً: قبل الدخول في الحلقة
  3. استخدم break بحكمة: عند وجود شروط إيقاف متعددة
  4. الفرق بين while و do-while: الأخيرة تنفذ مرة واحدة على الأقل
7. متى تستخدم while؟
  1. عند عدم معرفة عدد التكرارات مسبقاً
  2. عند التعامل مع مدخلات مستخدم غير محددة
  3. عند قراءة ملفات حتى النهاية
  4. في المحاكاة والألعاب حيث تتوقف الحلقة بحدث معين
  5. عند الانتظار لشرط معين قبل الاستمرار

8. تمارين تطبيقية

التمرين 1: عد الأرقام الزوجية

int num = 0;
int evenCount = 0;

while (num < 20) {
  num++;
  if (num % 2 != 0) continue;
  evenCount++;
  print('رقم زوجي: $num');
}

print('عدد الأرقام الزوجية: $evenCount');
Dart

9. الأخطاء الشائعة

أ. حلقة لا نهائية

int x = 0;
while (x < 5) { // نسيان تحديث x
  print(x);
  // x++; // هذا السطر مفقود
}
Dart

ب. شرط غير متغير

bool condition = true;
while (condition) { // condition لا تتغير أبداً
  print('حلقة لا نهائية');
}
Dart

ج. سوء إدارة الذاكرة

while (true) {
  var bigData = List.filled(1000000, 'data'); // تسرب للذاكرة
  // يجب إضافة آلية إيقاف
}
Dart
10. الخلاصة
  • while مناسبة للحالات التي لا تعرف فيها عدد التكرارات مسبقاً
  • تقييم الشرط يتم قبل كل تكرار
  • استخدم break و continue للتحكم في تدفق الحلقة
  • تأكد من وجود تحديث لمتغير الشرط لتجنب الحلقات اللانهائية
  • do-while تختلف بأنها تنفذ الكود قبل التحقق من الشرط

حلقة while هي أداة قوية للتحكم في التدفق عند استخدامها بشكل صحيح، ولكنها قد تكون خطيرة إذا لم يتم التحكم فيها جيداً.