Sobes.tech
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:

  1. 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, Derived Base uygulamasını b nesnesine devreder.

  2. Ö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.
      class User(val map: Map<String, Any?>) {
          val name: String by map
          val age: Int by map
      }
      
      Kullanım: 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.