Avatar ·

النقل بالقيمة أو بالمرجع في 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" } ``` هنا