Sobes.tech
Middle

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:

  1. getValue va setValue tushunchasi: O'qishga mo'ljallangan (val) mulklar uchun delegat getValue metodiga ega bo'lishi kerak. O'qish va yozishga mo'ljallangan (var) mulklar uchun esa, delegat getValue va setValue metodlariga ega bo'lishi kerak. Bu metodlar quyidagi parametrlarni oladi:

    • Mulkni o'z ichiga olgan ob'ektga havola (sinf a'zolari uchun).
    • KProperty ob'ekti shaklida mulk metama ma'lumotlari.
  2. 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.
  3. Istalgan delegatlar: O'z sinflaringiz uchun delegat sinflarini yaratishingiz mumkin. Sinf ReadOnlyProperty (val) yoki ReadWriteProperty ( 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()
}