(2) Loop In List

ما هي الـ Loop؟

الـ loop (الحلقة) تسمح لك بتكرار تنفيذ جزء من الكود عدة مرات. وهذا مفيد جدًا عند التعامل مع List لقراءة العناصر أو التعديل عليها.

📚 أنواع الحلقات في Dart
  1. for loop
  2. for-in loop
  3. while loop
  4. do-while loop
  5. forEach() (تابعة على الـ List)
🎯 المثال الرئيسي: لدينا قائمة
List<String> names = ['Ali', 'Omar', 'Sara'];
JavaScript
1️⃣ for loop

🔹 تستخدم عندما تحتاج إلى معرفة مؤشر العنصر (index).

for (int i = 0; i < names.length; i++) {
  print('Name at index $i is ${names[i]}');
}
JavaScript
2️⃣ for-in loop (الأبسط والأسهل)

🔹 تستخدم للمرور على كل العناصر بدون الحاجة إلى معرفة الفهرس.

for (var name in names) {
  print('Name: $name');
}
JavaScript
3️⃣ while loop

🔹 تستخدم عندما لا تعرف عدد التكرارات مسبقًا وتتحكم بشروط التكرار.

int i = 0;
while (i < names.length) {
  print('Name: ${names[i]}');
  i++;
}
JavaScript
4️⃣ do-while loop

🔹 تشبه while ولكن تضمن تنفيذ الكود مرة واحدة على الأقل.

int i = 0;
do {
  print('Name: ${names[i]}');
  i++;
} while (i < names.length);
JavaScript
5️⃣ forEach() method

🔹 دالة مدمجة في List، تقبل دالة (Function) تمر على كل عنصر.

names.forEach((name) {
  print('Name: $name');
});
JavaScript
✅ متى تستخدم كل نوع؟
النوعالأفضلية عند
forتحتاج الوصول للفهرس (index)
for-inتريد المرور ببساطة على كل العناصر
whileتتحكم بشرط خارجي أو حالة متغيرة
do-whileتريد تنفيذ الكود أولًا ثم التحقق
forEach()طريقة نظيفة وحديثة للعرض فقط
🧪 مثال تطبيقي: جمع أطوال أسماء القائمة
int totalLength = 0;
for (var name in names) {
  totalLength += name.length;
}
print('Total length: $totalLength');
JavaScript
✅ أولاً: قائمة أرقام للتجربة
List<int> numbers = [3, 7, 1, 9, 4, 6];
JavaScript
1️⃣ جمع جميع الأرقام
int sum = 0;
for (int num in numbers) {
  sum += num;
}
print('Sum = $sum');  // الناتج: Sum = 30
JavaScript
2️⃣ طباعة الأرقام الزوجية فقط
for (int num in numbers) {
  if (num % 2 == 0) {
    print('Even: $num');
  }
}
JavaScript
3️⃣ إنشاء قائمة جديدة تحتوي على الأرقام الفردية فقط
List<int> oddNumbers = [];

for (int num in numbers) {
  if (num % 2 != 0) {
    oddNumbers.add(num);
  }
}

print('Odd numbers: $oddNumbers');  // [3, 7, 1, 9]
JavaScript
4️⃣ ضرب كل رقم في 2 وتخزينه في قائمة جديدة
List<int> doubled = [];

for (int num in numbers) {
  doubled.add(num * 2);
}

print('Doubled: $doubled');  // [6, 14, 2, 18, 8, 12]
JavaScript
5️⃣ إيجاد أكبر رقم
int max = numbers[0];

for (int num in numbers) {
  if (num > max) {
    max = num;
  }
}

print('Max: $max');  // 9
JavaScript
6️⃣ استخدام forEach لنفس العمليات (مثال على الطباعة)
numbers.forEach((num) {
  if (num > 5) {
    print('Greater than 5: $num');
  }
});
JavaScript
7️⃣ حذف كل الأرقام الأصغر من 5 (باستخدام removeWhere)
numbers.removeWhere((num) => num < 5);
print(numbers);  // [7, 9, 6]
JavaScript
8️⃣ جمع الأرقام باستخدام .reduce()
int total = numbers.reduce((a, b) => a + b);
print('Total with reduce: $total');
JavaScript

🟡 .reduce() يتطلب ألا تكون القائمة فارغة.

9️⃣ إيجاد العدد الأصغر باستخدام for loop
int min = numbers[0];

for (int num in numbers) {
  if (num < min) {
    min = num;
  }
}
print('Min: $min');
JavaScript
🔟 التوقف عن التكرار عند رقم معين (مثلاً أول رقم أكبر من 5)
for (int num in numbers) {
  if (num > 5) {
    print('Found: $num');
    break;
  }
}
JavaScript
✅ ما المقصود بـ “استبدال العناصر”؟

يعني تغيير قيمة عنصر موجود في القائمة إلى قيمة جديدة، إما:

  • بالاعتماد على الفهرس (index).
  • أو بناءً على شرط معين.
🟦 1. الاستبدال باستخدام الفهرس (index)
✅ المثال:
List<String> fruits = ['Apple', 'Banana', 'Orange'];

fruits[1] = 'Mango';  // استبدال العنصر الثاني

print(fruits);  // [Apple, Mango, Orange]
JavaScript

تذكر: الفهرسة تبدأ من الصفر، أي fruits[1] تشير إلى العنصر “Banana”.

🟦 2. استبدال عنصر حسب شرط معين
✅ استبدال كل رقم أكبر من 5 بـ 0
List<int> numbers = [3, 8, 2, 9, 1];

for (int i = 0; i < numbers.length; i++) {
  if (numbers[i] > 5) {
    numbers[i] = 0;
  }
}

print(numbers);  // [3, 0, 2, 0, 1]
JavaScript
🟦 3. استبدال كل العناصر دفعة واحدة (باستخدام map)

إذا أردت إنشاء قائمة جديدة بنفس الطول ولكن بقيم معدلة:

✅ مضاعفة كل رقم:
List<int> original = [1, 2, 3];
List<int> doubled = original.map((num) => num * 2).toList();

print(doubled);  // [2, 4, 6]
JavaScript
✅ استبدال كل اسم بـ “Unknown”
List<String> names = ['Ali', 'Sara', 'Omar'];
List<String> unknowns = names.map((name) => 'Unknown').toList();

print(unknowns);  // [Unknown, Unknown, Unknown]
JavaScript
🟦 4. استبدال أول عنصر يطابق قيمة محددة
List<int> numbers = [5, 7, 3, 7];

int index = numbers.indexOf(7);
if (index != -1) {
  numbers[index] = 99;
}

print(numbers);  // [5, 99, 3, 7]
JavaScript
🟦 5. استبدال كل ظهور لقيمة محددة
List<int> numbers = [5, 7, 3, 7, 7];

for (int i = 0; i < numbers.length; i++) {
  if (numbers[i] == 7) {
    numbers[i] = 0;
  }
}

print(numbers);  // [5, 0, 3, 0, 0]
JavaScript
🟡 ملاحظات مهمة:
الحالةالطريقة
استبدال عنصر بموقع معيناستخدم list[index] = newValue
استبدال حسب شرطاستخدم for مع if
استبدال الكل بطريقة معينةاستخدم .map().toList()
استبدال أول ظهور لقيمة معينةاستخدم indexOf() ثم عدّل
✍️ ملاحظة أخيرة:

إذا أردت استبدال جزء من القائمة (وليس كل قيمة)، يمكنك استخدام:

replaceRange()
List<String> names = ['Ali', 'Omar', 'Sara', 'Lina'];
names.replaceRange(1, 3, ['Ahmed', 'Nora']);  // تستبدل العناصر من index 1 إلى قبل 3

print(names);  // [Ali, Ahmed, Nora, Lina]
JavaScript