English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل Kotlin الأساسي

تحكم Kotlin

الوظائف في Kotlin

الصفحات في Kotlin

Kotlin موجه الأشياء (OOP)

getter و setter في Kotlin

في هذا المقال، ستتعلم باستخدام مثال كيفية استخدام getter وsetter في Kotlin.

قبل تعلم getter وsetter، من الأفضل أن تكون قد فهمتفئات Kotlin وغيرها.

في البرمجة، getter يستخدم لاستخراج قيمة الخاصية. بنفس الطريقة، يستخدم setter لضبط قيمة الخاصية.

في Kotlin، getter وsetter إختياري، إذا لم يتم إنشاؤهما في البرنامج، سيتم إنشاؤهما تلقائيًا.

كيف يعمل getter وsetter؟

الكود التالي في Kotlin

class Person {
    var name: String = "defaultValue"
}

مثل

class Person {
    var name: String = "defaultValue"
    // getter
    get() = field
    // setter
    set(value) {
        field = value
    }
}

عند تعريف جسم Person والبدء في خاصية name، سيتم تمرير قيمة المعامل إلى setters وسيتم تعيين field بمقارنة value.

val p = Person()
p.name = "jack"

الآن، عندما تصل إلى خاصية name للجسم، بسبب الكود get()=field، ستحصل على field

println("${p.name}")

هذا مثال يعمل:

fun main(args: Array<String>) {
    val p = Person()
    p.name = "jack"
    println("${p.name}")
}
class Person {
    var name: String = "defaultValue"
    get() = field
    set(value) {
        field = value
    }
}

عند تشغيل هذا البرنامج، الناتج هو:

jack

بالافتراض، هذا هو كيف يعمل getter وsetter. ولكن، يمكنك استخدام getter وsetter لتغيير قيمة الخاصية (تعديل القيمة).

مثال: تغيير قيمة الخاصية

fun main(args: Array<String>) {
    val maria = Girl()
    maria.actualAge = 15
    maria.age = 15
    println("玛莉亚: 实际年龄 = ${maria.actualAge}")
    println("玛莉亚: 虚拟年龄 = ${maria.age}")
    val angela = Girl()
    angela.actualAge = 35
    angela.age = 35
    println("安戈洛: 实际年龄 = ${angela.actualAge}")
    println("安戈洛: 虚拟年龄 = ${angela.age}")
}
class Girl {
    var age: Int = 0
    get() = field
    set(value) {
        field = if (value < 18)
            18
        else if (value >= 18 && value <= 30)
            value
        else
            value-3
    }
    var actualAge: Int = 0
}

عند تشغيل هذا البرنامج، الناتج هو:

ماري: العمر الفعلي = 15
ماري: العمر الافتراضي = 18
أنغولو: العمر الفعلي = 35
أنغولو: العمر الافتراضي = 32

في هذا السياق، يعمل ActialAge كما هو متوقع.

لكن، يمكن تعديل logic setter لتحديث قيمة age.