Xususiyatlar delegatlarining xususiyati nima?
sobes.tech AI
AIdan javob
Kotlin'dagi mulk delegatlari mulkni olish va o'rnatish mantiqini yordamchi sinfga o'tkazishga imkon beradi, bu sinf delegat deb ataladi.
Xususiyatlar:
-
getValuevasetValuetushunchasi: O'qishga mo'ljallangan (val) mulklar uchun delegatgetValuemetodiga ega bo'lishi kerak. O'qish va yozishga mo'ljallangan (var) mulklar uchun esa, delegatgetValuevasetValuemetodlariga ega bo'lishi kerak. Bu metodlar quyidagi parametrlarni oladi:- Mulkni o'z ichiga olgan ob'ektga havola (sinf a'zolari uchun).
KPropertyob'ekti shaklida mulk metama ma'lumotlari.
-
Standart delegatlar: Kotlin bir qator standart delegatlarni taqdim etadi:
lazy: mulkni kechiktirilgan boshlash uchun.observable: mulk qiymati o'zgarganda ma'lum bir harakatni bajarish uchun.vetoable: mulk qiymati o'zgarganda harakatni bajarish va o'zgarishni bekor qilish imkoniyati bilan.- Xaritalar uchun delegatlar: Mulk
Mapda saqlanishi mumkin.
-
Istalgan delegatlar: O'z sinflaringiz uchun delegat sinflarini yaratishingiz mumkin. Sinf
ReadOnlyProperty(val) yokiReadWriteProperty(var) interfeyslarini amalga oshirishi kerak.
lazy dan foydalanish misoli:
// Maydon faqat birinchi kirishda boshlanadi
val lazyValue: String by lazy {
println("Qiymatni hisoblayapman")
"Hello"
}
observable dan foydalanish misoli:
import kotlin.properties.Delegates
var name: String by Delegates.observable("<ism yo'q>") {
property, eskiQiy, yangiQiy ->
println("$eskiQiy -> $yangiQiy")
}
Maxsus delegat misoli:
import kotlin.reflect.KProperty
class Delegate {
operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
return "$thisRef, mulk nomi '${property.name}'"
}
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
println("$thisRef, mulk '${property.name}' qiymati '$value' ga o'zgartirildi")
}
}
class Example {
var p: String by Delegate()
}