ما هي الـ Loop؟
الـ loop (الحلقة) تسمح لك بتكرار تنفيذ جزء من الكود عدة مرات. وهذا مفيد جدًا عند التعامل مع List لقراءة العناصر أو التعديل عليها.
📚 أنواع الحلقات في Dart
for
loopfor-in
loopwhile
loopdo-while
loopforEach()
(تابعة على الـ List)
🎯 المثال الرئيسي: لدينا قائمة
List<String> names = ['Ali', 'Omar', 'Sara'];
JavaScript1️⃣ for
loop
🔹 تستخدم عندما تحتاج إلى معرفة مؤشر العنصر (index).
for (int i = 0; i < names.length; i++) {
print('Name at index $i is ${names[i]}');
}
JavaScript2️⃣ for-in
loop (الأبسط والأسهل)
🔹 تستخدم للمرور على كل العناصر بدون الحاجة إلى معرفة الفهرس.
for (var name in names) {
print('Name: $name');
}
JavaScript3️⃣ while
loop
🔹 تستخدم عندما لا تعرف عدد التكرارات مسبقًا وتتحكم بشروط التكرار.
int i = 0;
while (i < names.length) {
print('Name: ${names[i]}');
i++;
}
JavaScript4️⃣ do-while
loop
🔹 تشبه while
ولكن تضمن تنفيذ الكود مرة واحدة على الأقل.
int i = 0;
do {
print('Name: ${names[i]}');
i++;
} while (i < names.length);
JavaScript5️⃣ 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];
JavaScript1️⃣ جمع جميع الأرقام
int sum = 0;
for (int num in numbers) {
sum += num;
}
print('Sum = $sum'); // الناتج: Sum = 30
JavaScript2️⃣ طباعة الأرقام الزوجية فقط
for (int num in numbers) {
if (num % 2 == 0) {
print('Even: $num');
}
}
JavaScript3️⃣ إنشاء قائمة جديدة تحتوي على الأرقام الفردية فقط
List<int> oddNumbers = [];
for (int num in numbers) {
if (num % 2 != 0) {
oddNumbers.add(num);
}
}
print('Odd numbers: $oddNumbers'); // [3, 7, 1, 9]
JavaScript4️⃣ ضرب كل رقم في 2 وتخزينه في قائمة جديدة
List<int> doubled = [];
for (int num in numbers) {
doubled.add(num * 2);
}
print('Doubled: $doubled'); // [6, 14, 2, 18, 8, 12]
JavaScript5️⃣ إيجاد أكبر رقم
int max = numbers[0];
for (int num in numbers) {
if (num > max) {
max = num;
}
}
print('Max: $max'); // 9
JavaScript6️⃣ استخدام forEach
لنفس العمليات (مثال على الطباعة)
numbers.forEach((num) {
if (num > 5) {
print('Greater than 5: $num');
}
});
JavaScript7️⃣ حذف كل الأرقام الأصغر من 5 (باستخدام removeWhere
)
numbers.removeWhere((num) => num < 5);
print(numbers); // [7, 9, 6]
JavaScript8️⃣ جمع الأرقام باستخدام .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