Sobes.tech
Middle

Özellik delegatlarının özelliği nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Kotlin'deki özellik delegeleri, bir özelliğin değerinin alınması ve ayarlanmasıyla ilgili mantığı, delegat adlı yardımcı bir sınıfa aktarmayı sağlar.

Özellikler:

  1. getValue ve setValue'nun Anlaşılması: Okunabilir özellikler (val) için delegat getValue metoduna sahip olmalıdır. Okunabilir ve yazılabilir özellikler (var) için ise hem getValue hem de setValue metodlarına sahip olmalıdır. Bu metodlar şu parametreleri alır:

    • Özelliği içeren nesneye referans (sınıf üyeleri için).
    • Bir KProperty nesnesi şeklinde özellik meta verileri.
  2. Standart delegatlar: Kotlin, çeşitli standart delegatlarla birlikte gelir:

    • lazy: Özelliğin tembel başlatılması için.
    • observable: Özellik değeri değiştiğinde belirli bir işlemi gerçekleştirmek için.
    • vetoable: Özellik değeri değiştiğinde belirli bir işlemi gerçekleştirmek ve değişikliği iptal etme imkanı sağlar.
    • Map'ler için delegatlar: Özellik bir Map'te saklanabilir.
  3. İstediğiniz delegatlar: Kendi delegat sınıflarınızı oluşturabilirsiniz. Sınıf, ReadOnlyProperty (val için) veya ReadWriteProperty ( var için) arayüzlerini uygulamalıdır.

lazy kullanım örneği:

// Alan ilk erişimde başlatılır
val lazyValue: String by lazy { 
    println("Değeri hesaplıyorum")
    "Hello"
}

observable kullanım örneği:

import kotlin.properties.Delegates

var name: String by Delegates.observable("<isim yok>") {
    property, eskiDeger, yeniDeger ->
    println("$eskiDeger -> $yeniDeger")
}

Özel delegat örneği:

import kotlin.reflect.KProperty

class Delegate {
    operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
        return "$thisRef, özellik '${property.name}' değeri"
    }

    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
        println("$thisRef, '${property.name}' özelliğinin değeri '$value' olarak değiştirildi")
    }
}

class Example {
    var p: String by Delegate()
}