Özet - Delegasyon
- Kotlin kursu
- Orta seviye
- Ders 75/116
- 5 dk
by, lazy ve custom delegate'i birleştirerek bir önbellek sistemi yazarsın.
Özet - Delegasyon
Bu grupta beş delegasyon aracı öğrendin. by bir sınıfa arayüz metodlarını başka nesneye delege ettirir. by lazy ertelenmiş hesaplama, by observable değişiklik izleme sağlar.
by map özellikleri bir haritadan okur. vetoable koşula göre atamayı reddeder. Özel delegate getValue ve setValue operatörleriyle davranışı tam denetler. Her araç composition ve kod yeniden kullanımı için güçlü bir yoldur.
Doğru delegasyonu seçmek
İşe göre aracı seç: sınıf delegasyonu için by, ertelenmiş hesaplama için by lazy, değişiklik izleme için observable. Dinamik veri için by map, doğrulama için vetoable, tam denetim için özel delegate.
Bu araçlar miras yerine composition sağlar; sınıfları esnek tutar. Bir logger'ı delege etmek, yapılandırmayı ertelenmiş yüklemek veya yaş negatifliğini reddetmek gibi gerçek ihtiyaçları temiz tek satırlarla çözer. Hangi aracın uygun olduğuna iş gereksinimi karar verir.
Uygulama Sınıf delegasyonu ve by lazy birleştir
interface Greeter { fun greet(): String } tanımla. class EnglishGreeter : Greeter içinde override fun greet() = "Hello" yaz. class App(g: Greeter) : Greeter by g tanımla. val tag by lazy { "v1" } tanımla. main içinde val app = App(EnglishGreeter()) ve println("${app.greet()} $tag") çağır.
Başlangıç kodu
interface Greeter {
fun greet(): String
}
class EnglishGreeter : Greeter {
override fun greet() = "Hello"
}
// App sınıfını tanımla: Greeter delegesi g ile
// tag değişkenini lazy delegesi ile tanımla
fun main() {
val app = App(EnglishGreeter())
// greet ve tag ile yazdır
}Örnek çözüm
interface Greeter {
fun greet(): String
}
class EnglishGreeter : Greeter {
override fun greet() = "Hello"
}
class App(g: Greeter) : Greeter by g
val tag by lazy { "v1" }
fun main() {
val app = App(EnglishGreeter())
println("${app.greet()} $tag")
}Beklenen çıktı
Hello v1
Uygulama observable ile değişiklik izle
import kotlin.properties.Delegates ekle. var count by Delegates.observable(0) { _, _, new -> println("Yeni: $new") } tanımla. main içinde count = 1 ve count = 2 ata.
Başlangıç kodu
import kotlin.properties.Delegates
// count değişkenini observable delegesi ile tanımla
fun main() {
// count'a 1 ve 2 ata
}Örnek çözüm
import kotlin.properties.Delegates
var count by Delegates.observable(0) { _, _, new -> println("Yeni: $new") }
fun main() {
count = 1
count = 2
}Beklenen çıktı
Yeni: 1 Yeni: 2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangisi bir nesneye arayüz delegasyonu yapar?
- by lazy
- by (arayüz) Doğru cevap
- by map
- vetoable
Açıklama: by (arayüz) sınıf delegasyonu yapar.
2 delegasyon araçlarını eşle
| Kavram | Anlamı |
|---|---|
by repo |
Sınıf delegasyonu |
by lazy |
Erken hesaplama |
by map |
Dinamik özellik |
vetoable |
Doğrulama |