Middle
Kotlin'de delege nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Kotlin'de delegasyon, bir nesnenin (delege) başka bir nesne adına belirli bir görevi yerine alma sorumluluğunu üstlendiği tasarım desenidir. Kotlin, sözdizimi seviyesinde yerel olarak delegasyonu destekler.
Kotlin'de iki ana delegasyon türü vardır:
-
Sınıf Delegasyonu (Class Delegation): Bir A sınıfının, bir arayüzü uygulamasına izin verir ve bu arayüzün tüm metod çağrılarını başka bir B nesnesine devreder.
interface Base { fun printMessage() } class BaseImpl(val x: Int) : Base { override fun printMessage() { // Arayüz metodunun uygulaması println(x) } } class Derived(b: Base) : Base by b // Base sınıfına delegasyonÖrnekte,
DerivedBaseuygulamasınıbnesnesine devreder. -
Özellik Delegasyonu (Delegated Properties): Bir özelliğin alınması ve ayarlanması mantığını başka bir nesneye devretmeyi sağlar. Kotlin, birkaç standart delegat sağlar:
lazy()ile gecikmeli başlatma.val lazyValue: String by lazy { // Sadece ilk erişimde çalışır println("Hesaplanıyor!") "Merhaba" }Delegates.observable()ile değişiklikleri dinleyicilere bildirme.import kotlin.properties.Delegates var name: String by Delegates.observable("başlangıç değeri") { prop, eski, yeni -> println("$eski -> $yeni") }Delegates.vetoable()ile değişiklikleri yakalamak.import kotlin.properties.Delegates var max: Int by Delegates.vetoable(0) { prop, eski, yeni -> yeni > eski }- Harita (
map) özelliklerine bağlanmak için delegeler.Kullanım:class User(val map: Map<String, Any?>) { val name: String by map val age: Int by map }User(mapOf("name" to "John Doe", "age" to 25))
Kotlin'de delegasyonun avantajları:
- Boilerplate kodu azaltma: Metot çağrılarını veya özellik mantığını otomatik yönlendirme.
- Kodun yeniden kullanımı: Mevcut delegeleri kullanma veya kendi delegelerinizi oluşturma imkanı.
- Sorumlulukların ayrılması: Özellik veya arayüz mantığını net bir şekilde ayırma.
- Esneklik: Delegasyon davranışını değiştirme imkanı, sınıfı değiştirmeden.