آموزش زبان کاتلین – درس ۱۹ (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 را تغییر می‌دهد.

بخوانید  Clean Code - کتابی که هر توسعه‌دهنده‌ای باید بخواند

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

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

0 دیدگاه

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