Sobes.tech
Middle

Kas ir deleģēšana Kotlin?

sobes.tech AI

Atbilde no AI

Kotlin deleģēšana ir dizaina paraugs, kurā objekts (deleģēts) uzņemas atbildību par noteikta uzdevuma izpildi cita objekta vārdā. Kotlin atbalsta nativu deleģēšanu sintakses līmenī.

Ir divi galvenie deleģēšanas veidi Kotlin:

  1. Klases deleģēšana (Class Delegation): Tas ļauj klasei A īstenot saskarni, deleģējot visus šīs saskarnes metožu izsaukumus citam objektam B.

    interface Base {
        fun printMessage()
    }
    
    class BaseImpl(val x: Int) : Base {
        override fun printMessage() {
            // Saskarnes metodes īstenojums
            println(x)
        }
    }
    
    class Derived(b: Base) : Base by b // Deleģēšana klasei Base
    

    Piemērā Derived deleģē Base īstenošanu objektam b.

  2. Īpašību deleģēšana (Delegated Properties): Tā ļauj deleģēt īpašības iegūšanas un iestatīšanas loģiku citam objektam. Kotlin nodrošina vairākus standarta deleģētājus:

    • lazy() aizkavētai inicializācijai.
      val lazyValue: String by lazy {
          // Tiek izpildīts tikai pirmajā piekļuvē lazyValue
          println("izskaitļo!")
          "Sveiki"
      }
      
    • Delegates.observable() brīdinājumam par izmaiņām.
      import kotlin.properties.Delegates
      
      var name: String by Delegates.observable("initial value") {
          prop, old, new ->
          println("$old -> $new")
      }
      
    • Delegates.vetoable() izmaiņu pārtraukšanai pirms to piemērošanas.
      import kotlin.properties.Delegates
      
      var max: Int by Delegates.vetoable(0) {
          prop, old, new -> new > old
      }
      
    • Delegāti, kas saista ar kartes (map) īpašībām.
      class User(val map: Map<String, Any?>) {
          val name: String by map
          val age: Int by map
      }
      
      Lietošana: User(mapOf("name" to "John Doe", "age" to 25))

Kotlin deleģēšanas priekšrocības:

  • Samazina boilerplate kodu: Automātiski novirza metožu vai īpašību loģiku.
  • Koda atkārtota lietošana: Iespēja izmantot gatavus deleģētājus vai veidot savus.
  • Atbildības sadalījums: Skaidrs īpašības vai saskarnes loģikas sadalījums.
  • Elastība: Iespēja mainīt deleģēšanas uzvedību bez klases izmaiņām.