Avatar ·

التمرير بالقيمة أو بالمرجع في Kotlin: لماذا لا يمكنني تغيير الرقم داخل الدالة؟

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