کلمه Getter و Setter
Kotlin Setter and Getter word
در برنامهنویسی از getter برای دریافت مقدار یک پراپرتی و از setter برای مقداردهی یک پراپرتی استفاده میشود. در کاتلین getter و setterها اختیاری هستند و اگر شما آن را نسازید، کمپایلر به صورت خودکار تولیدشان میکند.
طرزکار getter و setter در کاتلین
1 2 3 | class Person { var name: String = "defaultValue" } |
کد بالا معادل کد پایین است:
1 2 3 4 5 6 7 8 9 | class Person { var name: String = "defaultValue" // getter get() = field // setter set(value) { field = value } } |
وقتی کلاس Person را نمونهسازی میکنید و شیای از آن میسازید، با مقداردهی پراپرتی name تابع setter فراخوانی شده و field را به آن مقدار ست میکند:
1 2 | val p = Person() p.name = "jack" |
حالا وقتی به پراپرتی name دسترسی پیدا میکنیم، مقدار field را دریافت میکنیم چون get()=field است.
1 | println("${p.name}") |
یک مثال عملی:
1 2 3 4 5 6 7 8 9 10 11 12 | 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 } } |
خروجی:
1 | jack |
این طرز کار پیشفرض getter و setter است. با این حال شما میتوانید مقدار پراپرتی را با استفاده از getter و setter به چیزی که میخواهید تغیر دهید. در واقع کمی منطق به آن اضافه کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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 } |
خروجی:
1 2 3 4 | Maria: actual age = 15 Maria: pretended age = 18 Angela: actual age = 35 Angela: pretended age = 32 |
اینجا پراپرتی actualAge به همان صورتی که انتظار داریم کار میکند. با این حال داخل setter منطقی اضافه شده که مقدار پراپرتی age را تغییر میدهد.
Kotlin Setter and Getter word Kotlin Setter and Getter word Kotlin Setter and Getter word Kotlin Setter and Getter word Kotlin Setter and Getter word