Sobes.tech
Middle

Ce este delegarea în Kotlin?

sobes.tech AI

Răspuns de la AI

Delegarea în Kotlin este un pattern de proiectare în care un obiect (delegatul) își asumă responsabilitatea de a executa o anumită sarcină în numele altui obiect. Kotlin suportă delegarea nativ la nivel de sintaxă.

Există două tipuri principale de delegare în Kotlin:

  1. Delegarea de clasă (Class Delegation): Permite unei clase A să implementeze o interfață, delegând toate apelurile de metode ale acesteia către un alt obiect B.

    interface Base {
        fun printMessage()
    }
    
    class BaseImpl(val x: Int) : Base {
        override fun printMessage() {
            // Implementarea metodei interfeței
            println(x)
        }
    }
    
    class Derived(b: Base) : Base by b // Delegare la clasa BaseImpl
    

    În exemplu, Derived deleagă implementarea Base către obiectul b.

  2. Delegarea proprietăților (Delegated Properties): Permite delegarea logicii de obținere și setare a valorii unei proprietăți către un alt obiect. Kotlin oferă mai mulți delegați standard:

    • lazy() pentru inițializare întârziată.
      val lazyValue: String by lazy {
          // Se execută doar la prima referință la lazyValue
          println("se calculează!")
          "Salut"
      }
      
    • Delegates.observable() pentru notificarea ascultătorilor despre modificări.
      import kotlin.properties.Delegates
      
      var name: String by Delegates.observable("valoare inițială") {
          prop, old, new ->
          println("$old -> $new")
      }
      
    • Delegates.vetoable() pentru interceptarea modificărilor înainte de aplicare.
      import kotlin.properties.Delegates
      
      var max: Int by Delegates.vetoable(0) {
          prop, old, new -> new > old
      }
      
    • Delegatori pentru legarea de proprietățile unui map (map).
      class User(val map: Map<String, Any?>) {
          val name: String by map
          val age: Int by map
      }
      
      Utilizare: User(mapOf("name" to "John Doe", "age" to 25))

Avantajele utilizării delegației în Kotlin:

  • Reducerea boilerplate-ului: Redirecționează automat apelurile de metode sau logica proprietăților.
  • Reutilizarea codului: Posibilitatea de a folosi delegați existenți sau de a crea propriile delegați.
  • Separarea responsabilităților: Divizează clar logica proprietății sau a interfeței.
  • Flexibilitate: Permite modificarea comportamentului delegației fără a modifica clasa.