(1) List in Dart

اللائحة (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]
Dart

3. الوصول إلى عناصر List

أ. الوصول عبر الفهرس

List<String> fruits = ['تفاح', 'موز', 'برتقال'];

print(fruits[0]); // "تفاح"
print(fruits.elementAt(1)); // "موز"
Dart

ب. الوصول إلى أول/آخر عنصر

print(fruits.first); // "تفاح"
print(fruits.last); // "برتقال"
Dart

4. إضافة العناصر

أ. الإضافة البسيطة

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]
Dart

5. حذف العناصر

أ. الحذف بالقيمة

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]
Dart

6. تحديث العناصر

List<String> languages = ['Dart', 'Java', 'Python'];
languages[1] = 'JavaScript'; // ['Dart', 'JavaScript', 'Python']
Dart

7. البحث والفحص

أ. البحث عن عنصر

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]
Dart

8. التكرار والتحويل

أ. التكرار على العناصر

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();
Dart
9. العمليات المتقدمة
أ. الفرز (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];
Dart
11. أفضل الممارسات

حدد نوع List دائماً لتجنب الأخطاء:

// جيد
List<String> names = [];

// سيء
var names = [];
Dart

استخدم const للقوائم الثابتة:

static const List<String> months = [
  'يناير', 'فبراير', 'مارس'
];
Dart

تفضيل Spread Operator (…) للدمج:

List<int> allNumbers = [...list1, ...list2];
Dart
  1. استخدم where للفلترة بدلاً من حلقات for معقدة
  2. تجنب تعديل List أثناء التكرار عليها:
// خطأ
for (var item in list) {
  if (condition) list.remove(item);
}

// صحيح
list.removeWhere((item) => condition);
Dart
12. الخاتمة

اللائحة (List) في Dart تقدم:

  • طريقة فعالة لتنظيم البيانات المتعددة
  • أداءً عالياً للوصول العشوائي
  • مجموعة غنية من الدوال المساعدة
  • مرونة في التعامل مع البيانات

يمكن استخدامها في:

  • تخزين بيانات التطبيق
  • معالجة المدخلات والمخرجات
  • تنفيذ خوارزميات البيانات
  • بناء هياكل بيانات أكثر تعقيداً