Kotlin MutableList: كيفية إنشاء قائمة فارغة دون فقدان الصواب

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: مفارقة القائمة الفارغة في Kotlin

\n\n

تخيل: أنت تكتب بلغة Kotlin، وتحتاج إلى إنشاء قائمة سيتم ملؤها ديناميكيًا. أنت تعلم أن List هي مجموعة غير قابلة للتغيير، وأن MutableList هي ما يصفه الطبيب. ولكن بمجرد كتابة val list = MutableList()، يظهر خطأ من المترجم. هل هذا مألوف؟

\n\n

هذا السؤال هو من أكثر الأسئلة شيوعًا على Stack Overflow بين المبتدئين في Kotlin (وليس فقط). آلاف المطورين يتعثرون بنفس المشكلة: كيف نهيئ MutableList فارغة بشكل صحيح؟ قد تبدو تفصيلة صغيرة، لكن بدونها لا تعمل أي خوارزمية ديناميكية.

\n\n

في هذه المقالة، سنستعرض جميع الطرق القانونية لإنشاء قائمة قابلة للتغيير فارغة في Kotlin. من الحيل البسيطة إلى التقنيات المتقدمة. ستتعرف لماذا mutableListOf() هو أفضل صديق لك، و ArrayList() هو الرفيق القديم الموثوق. هيا بنا!

\n\n

1. لماذا لا يعمل MutableList() ببساطة؟

\n\n

دعنا نبدد الأسطورة فورًا. إذا حاولت كتابة:

\n\n
// خطأ في الترجمة!\nval list = MutableList()
\n\n

سيحتج المترجم بحق. لماذا؟ لأن MutableList هي واجهة (interface) وليست فئة محددة. لا يمكن إنشاء كائن من واجهة. الأمر يشبه محاولة إنشاء "سيارة فقط" دون تحديد الماركة والموديل. Kotlin يتطلب تنفيذًا محددًا.

\n\n

لحسن الحظ، لدينا عدة طرق أنيقة لتجاوز هذا القيد.

\n\n

2. أسهل طريقة: mutableListOf()

\n\n

هذه هي ملكة القوائم الفارغة. دالة مصنع قياسية من المكتبة القياسية لـ Kotlin:

\n\n
val emptyList = mutableListOf<String>()\nprintln(emptyList) // الإخراج: []\nprintln(emptyList.size) // الإخراج: 0
\n\n

لماذا هذا رائع:

\n
    \n
  • لا حاجة لتحديد النوع إذا كان يمكن استنتاجه من السياق
  • \n
  • تنشئ MutableList من نوع ArrayList تحت الغطاء
  • \n
  • تُقرأ كـ "أنشئ لي قائمة قابلة للتغيير من لا شيء"
  • \n
\n\n

إضافة العناصر متعة:

\n\n
val numbers = mutableListOf<Int>()\nnumbers.add(1)\nnumbers.add(2)\nnumbers.add(3)\nprintln(numbers) // [1, 2, 3]
\n\n

هذه الطريقة مناسبة لـ 90% من الحالات. احفظها كطريقة أساسية.

\n\n

3. الطريقة الكلاسيكية ArrayList() — عودة الملك

\n\n

إذا أتيت من Java، ستبدو لك هذه الطريقة مألوفة. Kotlin متوافق تمامًا مع Java Collections Framework، لذا يمكنك استخدام ArrayList مباشرة:

\n\n
val list = ArrayList<String>()\nprintln(list) // []
\n\n

لكن هناك فارق: ArrayList هو تنفيذ محدد لواجهة MutableList. إذا أردت لاحقًا تغيير التنفيذ (مثلاً إلى LinkedList)، ستحتاج لتغيير نوع المتغير. بهذا المعنى، mutableListOf() أكثر مرونة لأنه يُرجع MutableList.

\n\n

متى تستخدم ArrayList():

\n
    \n
  • عند الحاجة إلى أقصى أداء (ArrayList أسرع من LinkedList للوصول حسب الفهرس)
  • \n
  • عند العمل مع مكتبات Java التي تتوقع ArrayList تحديدًا
  • \n
  • عند اختيار تنفيذ محدد بوعي
  • \n
\n\n

4. الطريقة الذكية: MutableList(size) { defaultValue }

\n\n

أحيانًا القائمة الفارغة ليست "فارغة" تمامًا. قد تحتاج لإنشاء قائمة بحجم معروف مسبقًا ولكن بقيم فارغة. لهذا يوجد تحميل زائد للمُنشئ:

\n\n
// إنشاء قائمة من 5 عناصر، كل منها سلسلة فارغة\nval list = MutableList(5) { "" }\nprintln(list) // [, , , , ]\nprintln(list.size) // 5
\n\n

هذه ليست قائمة فارغة تمامًا، لكنها قائمة مهيأة بقيم "فارغة". مفيدة عندما تعرف عدد العناصر بالضبط ولكنك ستقوم بإعادة كتابتها.

\n\n

للحصول على صفر تام، استخدم

المدونات

توصيات الكتب