Avatar ·

ما معنى العامل * (النجمة) قبل المتغير في Kotlin؟ Spread Operator

مرحبًا! أنا أدرس Kotlin وصادفت بناء جملة غريبًا لا أستطيع فهمه. وجدت هذا الكود: ```kotlin val numbers = listOf(1, 2, 3) val moreNumbers = listOf(0, *numbers.toTypedArray(), 4, 5) println(moreNumbers) // [0, 1, 2, 3, 4, 5] ``` ماذا تعني العلامة النجمية `*` قبل `numbers.toTypedArray()`؟ أعلم أن في Java هناك عامل مشابه لتفكيك المصفوفات، لكن في Kotlin اعتدت العمل مع القوائم والمصفوفات بطريقة مختلفة. حاولت كتابة كود مشابه بدون العلامة النجمية: ```kotlin val wrong = listOf(0, numbers.toTypedArray(), 4, 5) println(wrong) // [0, [Ljava.lang.Integer;@..., 4, 5] ``` النتيجة كانت شيئًا غير صحيح — حيث تم إدراج كائن المصفوفة في القائمة بدلاً من عناصرها. كيف يمكن استخدام هذا العامل بشكل صحيح؟ هل هناك بدائل؟ ولماذا في Kotlin، التي تعتبر أكثر حداثة، نحتاج إلى مثل هذا البناء "القديم"؟ سأكون ممتنًا لشرح مع أمثلة، خاصة للحالات التي تحتوي على دوال تقبل vararg.