2 سال پیش / خواندن دقیقه

Getter-ها و Setter-ها در کاتلین به زبان ساده

در این بخش از مقاله آموزش کاتلین با شیوه استفاده از 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 مربوط به value ارسال می‌شود و مقدار field به صورت value تعیین می‌شود.

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)            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 استفاده می‌کند.

شاید از نوشته‌های زیر خوشتان بیاید
نظر خود را درباره این پست بنویسید ...

منوی سریع