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