Sobes.tech
Middle

Kas yra 'lazy' ir 'lateinit' Kotlin?

sobes.tech AI

Atsakymas iš AI

lazy - tai savybės delegatas vėlavimui ir nekeičiamiems (tik skaitymui) savybėms (val). Vertė apskaičiuojama pirmą kartą kreipiantis į savybę ir tada saugoma.

//  Lazy naudojimo pavyzdys
val lazyValue: String by lazy {
    println("Inicijavimas") // bus išvestas tik kartą pirmo kreipimosi metu
    "Labas, lazy!"
}

lateinit - modifikatorius keičiamoms (mutable) savybėms (var), leidžiantis atidėti inicijavimą iki pirmojo prieigos momento. Savybė turi būti ne-nullable. Naudojant savybę prieš inicijuojant, gaunama UninitializedPropertyAccessException.

//  lateinit naudojimo pavyzdys
lateinit var lateinitVariable: String

fun initializeVariable() {
    lateinitVariable = "Labas, lateinit!"
}

fun useVariable() {
    //  Inicijavimo patikrinimas prieš naudojimą (pasirinktinai, bet rekomenduojama)
    if (::lateinitVariable.isInitialized) {
        println(lateinitVariable)
    } else {
        println("Kintamasis dar nėra inicijuotas")
    }
}

Pagrindiniai skirtumai:

Savybė lazy lateinit
Savybės tipas val (tik skaityti) var (keičiamas)
Nulinės reikšmės galimybė Gali būti nullable arba non-nullable Turi būti non-nullable
Inicijavimas Automatinis, pirmo kreipimosi metu Rankinis
Vėlavimas Taip, apskaičiuojama pirmo kreipimosi metu Taip, be inicijavimo pradžioje
Srauto saugumas Paprastai, sinchronizacija, yra galimybės Ne garantuojama, priklauso nuo konteksto
Klaida prie prieigos iki inicijavimo Ne, automatiškai inicijuojama UninitializedPropertyAccessException