آموزش زبان کاتلین – درس ۱۹ (Getter و Setter)

نویسنده : سید ایوب کوکبی ۱۲ آذر ۱۳۹۷

آموزش زبان کاتلین – درس 19 (Getter و Setter)

قبل از شروع بحث getter و setter شما را ارجاع می‌دهم به درس قبلی یعنی کلاس و اشیاء. در برنامه‌نویسی از getter برای دریافت مقدار یک پراپرتی و از setter برای مقداردهی یک پراپرتی استفاده می‌شود. در کاتلین getter و setterها اختیاری هستند و اگر شما آن را نسازید، کمپایلر به صورت خودکار تولیدشان می‌کند.

طرزکار getter و setter در کاتلین

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

کد بالا معادل کد پایین است:

class Person {
    var name: String = "defaultValue"

    // getter
    get() = field

    // setter
    set(value) {
        field = value
    }
}

وقتی کلاس Person را نمونه‌سازی می‌کنید و شی‌ای از آن می‌سازید، با مقداردهی پراپرتی name تابع setter فراخوانی شده و field را به آن مقدار ست می‌کند:

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

حالا وقتی به پراپرتی name دسترسی پیدا می‌کنیم، مقدار field را دریافت می‌کنیم چون get()=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: actual age = ${maria.actualAge}")
    println("Maria: pretended age = ${maria.age}")

    val angela = Girl()
    angela.actualAge = 35
    angela.age = 35
    println("Angela: actual age = ${angela.actualAge}")
    println("Angela: pretended age = ${angela.age}")
}

class Girl {
    var age: Int = 0
    get() = field
    set(value) {
        field = if (value < 18)
            ۱۸
        else if (value >= 18 && value <= 30)
            value
        else
            value-3
    }

    var actualAge: Int = 0
}

خروجی:

Maria: actual age = 15
Maria: pretended age = 18
Angela: actual age = 35
Angela: pretended age = 32

اینجا پراپرتی actualAge به همان صورتی که انتظار داریم کار می‌کند. با این حال داخل setter منطقی اضافه شده که مقدار پراپرتی age را تغییر می‌دهد.

بخوانید  چگونه یک توسعه‌دهندۀ بروز باشیم؟

سید ایوب کوکبی

نویسنده و مترجم...

مطالب مرتبط

0 دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *