توفر Kotlin طرقًا متنوعة لإنشاء القوائم، لكل منها نقاط قوتها ونقاط ضعفها. إن اختيار النهج الصحيح أمر بالغ الأهمية لكتابة رمز فعال وقابل للصيانة. سيشمل هذا الدليل أكثر الطرق شيوعًا لتهيئة كل من القوائم الثابتة والقوائم القابلة للتغيير، مع تسليط الضوء على أفضل الممارسات على طول الطريق.
محتويات
إنشاء قوائم ثابتة
القوائم الثابتة، بمجرد إنشائها، لا يمكن تعديلها. هذه الخاصية توفر مزايا كبيرة من حيث سلامة مؤشرات الترابط والقدرة على التنبؤ، مما يجعلها مثالية للعديد من السيناريوهات. توفر Kotlin عدة طرق موجزة لإنشاء قوائم ثابتة:
استخدام listOf()
أبسط وأكثر الطرق شيوعًا هو استخدام دالة listOf()
. فهي تستنتج نوع القائمة من العناصر المقدمة:
val numbers = listOf(1, 2, 3, 4, 5)
println(numbers) // الإخراج: [1, 2, 3, 4, 5]
val mixed = listOf("apple", 1, 3.14) //أنواع مختلطة مسموح بها
println(mixed) // الإخراج: [apple, 1, 3.14]
val emptyList = listOf() //يُنصح بتحديد النوع صراحةً للقوائم الفارغة
println(emptyList) // الإخراج: []
محاولة تعديل قائمة ثابتة (مثل استخدام numbers.add(6)
) ستؤدي إلى خطأ وقت التجميع.
استخدام emptyList()
لإنشاء قائمة ثابتة فارغة، استخدم emptyList()
. إن تحديد النوع صراحةً هو ممارسة جيدة من أجل الوضوح وسلامة الأنواع:
val emptyStringList = emptyList()
println(emptyStringList) // الإخراج: []
إنشاء قوائم من المصفوفات
يمكنك تحويل مصفوفة موجودة إلى قائمة ثابتة باستخدام دالة toList()
:
val array = arrayOf(10, 20, 30)
val listFromArray = array.toList()
println(listFromArray) // الإخراج: [10, 20, 30]
إنشاء قوائم قابلة للتغيير
تسمح القوائم القابلة للتغيير بالتعديلات بعد الإنشاء، مما يوفر المرونة للسيناريوهات التي تحتاج فيها إلى تحديثات ديناميكية. ومع ذلك، تذكر أن هذه المرونة تأتي مع مسؤولية إدارة الآثار الجانبية المحتملة ومشاكل سلامة مؤشرات الترابط.
استخدام mutableListOf()
أبسط طريقة لإنشاء قائمة قابلة للتغيير هي استخدام mutableListOf()
. يعمل استنتاج النوع بنفس الطريقة كما هو الحال مع listOf()
:
val mutableNumbers = mutableListOf(1, 2, 3)
mutableNumbers.add(4)
mutableNumbers.remove(2)
println(mutableNumbers) // الإخراج: [1, 3, 4]
val mutableEmptyList = mutableListOf()
println(mutableEmptyList) // الإخراج: []
استخدام ArrayList()
ArrayList
هو تطبيق شائع لقائمة قابلة للتغيير. يمكنك إنشاؤه صراحةً، مع تحديد النوع، أو السماح للمترجم باستنتاجه:
val arrayList = ArrayList()
arrayList.add("Kotlin")
arrayList.add("is")
arrayList.add("fun")
println(arrayList) // الإخراج: [Kotlin, is, fun]
val arrayList2 = ArrayList(listOf("a", "b", "c")) //تهيئة مع مجموعة موجودة
println(arrayList2) // الإخراج: [a, b, c]
إنشاء نسخ قابلة للتغيير من المجموعات الموجودة
لإنشاء نسخة قابلة للتغيير من مجموعة ثابتة موجودة، استخدم mutableListOf()
مع عامل الانتشار:
val originalList = listOf("one", "two", "three")
val mutableCopy = mutableListOf(*originalList.toTypedArray())
mutableCopy.add("four")
println(originalList) // الإخراج: [one, two, three]
println(mutableCopy) // الإخراج: [one, two, three, four]
الاختيار بين القوائم الثابتة والقوائم القابلة للتغيير
يعتمد الاختيار بين القوائم الثابتة والقوائم القابلة للتغيير بشكل كبير على السياق. أعط الأولوية للقوائم الثابتة كلما أمكن ذلك نظرًا لسلامتها وقابليتها للتنبؤ المتأصلة. لا تلجأ إلى القوائم القابلة للتغيير إلا عندما تكون التعديلات ضرورية تمامًا. هذا النهج يحسن قابلية قراءة التعليمات البرمجية، ويقلل من خطر الأخطاء، ويعزز الصيانة العامة.