CodeBlanks Logo Icon CodeBlanks

custom delegate

Kendi property delegate'ini yazmayı öğrenirsin.

Özel delegate

Kendi delegate sınıfını yazabilirsin. Salt okunur bir özellik için operator fun getValue(thisRef: Any?, property: KProperty<*>): T tanımlanır. Örnek: class Single(val v: Int) { operator fun getValue(thisRef: Any?, property: KProperty<*>): Int = v }. Sonra val x by Single(42) ile kullanılır.

Oku-yaz özellik için operator fun setValue da eklenir. İstersen ReadOnlyProperty veya ReadWriteProperty arayüzlerini uygulayabilirsin ama operator fonksiyonları yazmak da yeterlidir. Bu, davranışı tamamen denetlemek için güçlü bir yoldur.

getValue operatörü

Bir delegate sınıfı operator fun getValue tanımladığında, by anahtar kelimesi ile bir özelliğe bağlanabilir. Örnek: class Single(val v: Int) { operator fun getValue(thisRef: Any?, property: KProperty<*>): Int = v }.

Kullanım: val x by Single(42). x her erişildiğinde getValue çağrılır ve 42 döner. thisRef özelliğin sahibi (null olabilir), property özellik referansıdır. Bu basit örnek sabit değer döner; daha karmaşık delegate'ler önbellek, günlük veya hesaplama yapabilir.

Uygulama Single delegate tanımla

import kotlin.reflect.KProperty ekle. class Single(val v: Int) tanımla; içinde operator fun getValue(thisRef: Any?, property: KProperty<*>): Int = v olsun. main içinde val x by Single(42) tanımla ve println(x) çağır.

Başlangıç kodu

Main.kt
import kotlin.reflect.KProperty

// Single sınıfını tanımla: getValue operatörü ile

fun main() {
    // x'i Single(42) delegesi ile tanımla ve yazdır
}

Örnek çözüm

Main.kt
import kotlin.reflect.KProperty

class Single(val v: Int) {
    operator fun getValue(thisRef: Any?, property: KProperty<*>): Int = v
}

fun main() {
    val x by Single(42)
    println(x)
}

Beklenen çıktı

42

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 custom delegate parçalarını eşle

Kavram Anlamı
ReadOnlyProperty Salt okunur
ReadWriteProperty Oku-yaz
getValue Okuma
setValue Yazma

2 getValue gövdesini tamamla

Soru
class Single(val v: Int) {
    operator fun getValue(thisRef: Any?, p: KProperty<*>): Int = ____
}
Cevap
class Single(val v: Int) {
    operator fun getValue(thisRef: Any?, p: KProperty<*>): Int = v
}

Açıklama: getValue v değerini döndürür.

3 Salt okunur özel delegate hangi operatörü gerektirir?

  • getValue Doğru cevap
  • setValue
  • ikisi de
  • yok

Açıklama: Salt okunur delegate yalnızca getValue gerektirir.

Orta seviye bölümündeki tüm dersler