Sobes.tech
Middle

Kotlin-də nümayəndəlik nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Kotlin-də delegasiya, obyektin (delegat) başqa bir obyekt adından müəyyən bir vəzifəni yerinə yetirmək məsuliyyətini öz üzərinə götürdüyü dizayn nümunəsidir. Kotlin sintaksis səviyyəsində təbii olaraq delegasiyanı dəstəkləyir.

Kotlin-də iki əsas delegasiya növü mövcuddur:

  1. Sinif delegasiyası (Class Delegation): Bu, A sinfinin interfeysi həyata keçirməsinə imkan verir və bu interfeysin bütün metod çağırışlarını başqa bir B obyektinə delegasiya edir.

    interface Base {
        fun printMessage()
    }
    
    class BaseImpl(val x: Int) : Base {
        override fun printMessage() {
            // İnterfeys metodunun həyata keçirilməsi
            println(x)
        }
    }
    
    class Derived(b: Base) : Base by b // Base sinfinə delegasiya
    

    Nümunədə, Derived Base-in həyata keçirilməsini b obyektinə delegasiya edir.

  2. Xüsusiyyət delegasiyası (Delegated Properties): Bu, bir xüsusiyyətin alınması və təyin olunması məntiqini başqa bir obyektə delegasiya etməyə imkan verir. Kotlin bir neçə standart delegat təqdim edir:

    • lazy() gecikdirilmiş başlanğıc üçün.
      val lazyValue: String by lazy {
          // Yalnız ilk müraciətdə icra olunur
          println("hesablanır!")
          "Salam"
      }
      
    • Delegates.observable() dəyişikliklər barədə dinləyicilərə bildiriş üçün.
      import kotlin.properties.Delegates
      
      var name: String by Delegates.observable("başlanğıc dəyər") {
          prop, köhnə, yeni ->
          println("$köhnə -> $yeni")
      }
      
    • Delegates.vetoable() dəyişiklikləri onların tətbiqindən əvvəl ələ keçirmək üçün.
      import kotlin.properties.Delegates
      
      var max: Int by Delegates.vetoable(0) {
          prop, köhnə, yeni -> yeni > köhnə
      }
      
    • Xəritə (map) xüsusiyyətlərinə bağlamaq üçün delegatlar.
      class User(val map: Map<String, Any?>) {
          val name: String by map
          val age: Int by map
      }
      
      İstifadə: User(mapOf("name" to "John Doe", "age" to 25))

Kotlin-də delegasiyanın üstünlükləri:

  • Boilerplate kodun azaldılması: Metod çağırışlarını və ya xüsusiyyət məntiqini avtomatik yönləndirmə.
  • Kodun təkrar istifadəsi: Mövcud delegatları istifadə etmək və ya öz delegatlarını yaratmaq imkanı.
  • Məsuliyyətlərin bölünməsi: Xüsusiyyət və ya interfeys məntiqinin aydın bölünməsi.
  • Esneklik: Delegasiya davranışını dəyişdirmək, sinfi dəyişdirmədən mümkündür.