اللائحة (List) هي واحدة من أهم هياكل البيانات في Dart، وتشبه المصفوفات في لغات البرمجة الأخرى. تسمح بتخزين مجموعة من العناصر من نفس النوع أو أنواع مختلفة (في حالة List<dynamic>
).
الفوائد الرئيسية:
- تخزين مجموعات من البيانات بشكل منظم
- الوصول السريع إلى العناصر عبر الفهرس
- توفر العديد من الدوال المساعدة للمعالجة
- قابلة للتعديل والتوسيع (ماعدا
List.unmodifiable
)
2. إنشاء List
أ. الطرق الأساسية للإنشاء
// 1. باستخدام القوسين المربعين []
List<String> names = ['أحمد', 'محمد', 'خالد'];
// 2. باستخدام المُنشئ List()
List<int> numbers = List.of([1, 2, 3]);
// 3. قائمة فارغة
List<double> prices = [];
// 4. قائمة بحجم ثابت
List<bool> flags = List.filled(3, false);
Dartب. إنشاء List متخصصة
// قائمة غير قابلة للتعديل
List<int> immutableList = List.unmodifiable([1, 2, 3]);
// قائمة يتم توليدها برمجياً
List<int> generatedList = List.generate(5, (index) => index * 2);
// الناتج: [0, 2, 4, 6, 8]
Dart3. الوصول إلى عناصر List
أ. الوصول عبر الفهرس
List<String> fruits = ['تفاح', 'موز', 'برتقال'];
print(fruits[0]); // "تفاح"
print(fruits.elementAt(1)); // "موز"
Dartب. الوصول إلى أول/آخر عنصر
print(fruits.first); // "تفاح"
print(fruits.last); // "برتقال"
Dart4. إضافة العناصر
أ. الإضافة البسيطة
List<int> numbers = [1, 2];
numbers.add(3); // [1, 2, 3]
Dartب. الإضافة المتعددة
numbers.addAll([4, 5]); // [1, 2, 3, 4, 5]
Dartج. الإضافة في موضع محدد
numbers.insert(0, 0); // [0, 1, 2, 3, 4, 5]
numbers.insertAll(2, [10, 11]); // [0, 1, 10, 11, 2, 3, 4, 5]
Dart5. حذف العناصر
أ. الحذف بالقيمة
List<String> colors = ['أحمر', 'أزرق', 'أخضر'];
colors.remove('أزرق'); // ['أحمر', 'أخضر']
Dartب. الحذف بالفهرس
colors.removeAt(0); // ['أخضر']
Dartج. حذف آخر عنصر
colors.removeLast(); // []
Dartد. حذف عناصر متعددة
List<int> nums = [1, 2, 3, 4, 5];
nums.removeRange(1, 3); // [1, 4, 5]
nums.removeWhere((n) => n > 3); // [1]
Dart6. تحديث العناصر
List<String> languages = ['Dart', 'Java', 'Python'];
languages[1] = 'JavaScript'; // ['Dart', 'JavaScript', 'Python']
Dart7. البحث والفحص
أ. البحث عن عنصر
List<int> ages = [25, 30, 35];
print(ages.contains(30)); // true
print(ages.indexOf(35)); // 2
print(ages.lastIndexWhere((age) => age > 20)); // 2 After function Lesson
Dartب. الفلترة
List<int> evenNumbers = ages.where((age) => age % 2 == 0).toList(); // [30]
Dart8. التكرار والتحويل
أ. التكرار على العناصر
fruits.forEach((fruit) => print(fruit));
for (String fruit in fruits) {
print(fruit);
}
Dartب. تحويل List
List<String> upperFruits = fruits.map((f) => f.toUpperCase()).toList();
List<int> lengths = fruits.map((f) => f.length).toList();
Dart9. العمليات المتقدمة
أ. الفرز (Sorting)
List<int> randomNumbers = [3, 1, 4, 1, 5];
randomNumbers.sort(); // [1, 1, 3, 4, 5]
// فرز مخصص
fruits.sort((a, b) => a.length.compareTo(b.length));
Dartب. عكس الترتيب
List<int> reversed = List.from(randomNumbers.reversed); // [5, 4, 3, 1, 1]
Dartج. دمج القوائم
List<int> combined = [...numbers, ...ages];
Dart11. أفضل الممارسات
حدد نوع List دائماً لتجنب الأخطاء:
// جيد
List<String> names = [];
// سيء
var names = [];
Dartاستخدم const للقوائم الثابتة:
static const List<String> months = [
'يناير', 'فبراير', 'مارس'
];
Dartتفضيل Spread Operator (…) للدمج:
List<int> allNumbers = [...list1, ...list2];
Dart- استخدم where للفلترة بدلاً من حلقات for معقدة
- تجنب تعديل List أثناء التكرار عليها:
// خطأ
for (var item in list) {
if (condition) list.remove(item);
}
// صحيح
list.removeWhere((item) => condition);
Dart12. الخاتمة
اللائحة (List) في Dart تقدم:
- طريقة فعالة لتنظيم البيانات المتعددة
- أداءً عالياً للوصول العشوائي
- مجموعة غنية من الدوال المساعدة
- مرونة في التعامل مع البيانات
يمكن استخدامها في:
- تخزين بيانات التطبيق
- معالجة المدخلات والمخرجات
- تنفيذ خوارزميات البيانات
- بناء هياكل بيانات أكثر تعقيداً