النقل بالقيمة أو بالمرجع في Kotlin: لماذا لا يمكنني تغيير الرقم داخل الدالة؟
مرحباً بالجميع! بدأت للتو في تعلم Kotlin بعد Java وأصبحت مشوشاً بشأن آلية تمرير الوسائط إلى الدوال. قرأت عدة مقالات ولكن لم أفهم تماماً.
إليك مثال بسيط. أكتب دالة يجب أن تزيد الرقم المُمرر بمقدار 10:
```kotlin
fun increaseValue(x: Int) {
x = x + 10 // خطأ في الترجمة: Val cannot be reassigned
}
```
المترجم يشتكي من أن x هي val. أفهم أن المعاملات في Kotlin هي مراجع غير قابلة للتغيير (val). ولكن كيف تعمل آلية النقل للكائنات القابلة للتغيير؟ إليك مثال آخر:
```kotlin
data class Person(var name: String)
fun changeName(person: Person) {
person.name = "New Name" // هذا يعمل
}
fun main() {
val p = Person("Old")
changeName(p)
println(p.name) // سيُطبع "New Name"
}
```
هنا