ما الفرق بين كتلة init والمنشئ في Kotlin؟
مرحبًا! بدأت للتو في تعلم Kotlin بعد Java وواجهت بعض الارتباك. في Java لدينا منشئات حيث نقوم بتهيئة الحقول. في Kotlin أرى أنه يمكن استخدام كل من المنشئات (الأولي والثانوي) وكتل `init` الخاصة. لكنني لا أفهم تمامًا لماذا نحتاج إلى كتل `init` إذا كان كل شيء يمكن فعله في المنشئ؟
على سبيل المثال، لدي هذا الكود:
```kotlin
class Person(name: String) {
val name: String
init {
this.name = name.uppercase()
}
}
```
لماذا لا نكتب `init` ببساطة داخل جسم المنشئ كما في Java؟ أو هذا المثال الآخر:
```kotlin
class Rectangle(val width: Int, val height: Int) {
val area: Int
init {
area = width * height
}
}
```
هل يمكن فعل ذلك مباشرة في المنشئ الأولي؟ ما الفرق الجوهري بين `init` والمنشئ؟ متى نستخدم أيهما؟ وماذا يحدث إذا كان للفئة عدة كتل `init` ومنشئات ثانوية — بأي ترتيب يتم تنفيذها؟