Sobes.tech
Middle

Kas ir 'lazy' un 'lateinit' Kotlin?

sobes.tech AI

Atbilde no AI

lazy - tas ir īpašības deleģāts atlikšanai un nemainīgām (tikai lasāmajām) īpašībām (val). Vērtība tiek aprēķināta pirmo piekļuvi īpašībai un pēc tam kešota.

//  Lazy izmantošanas piemērs
val lazyValue: String by lazy {
    println("Iniciācija") // tiks izvadīts tikai vienu reizi pirmajā piekļuvē
    "Sveiki, lazy!"
}

lateinit - modifikators mainīgām (mutable) īpašībām (var), kas ļauj atlikt inicializāciju līdz pirmās piekļuves brīdim. Īpašībai jābūt ne-nullable. Izmantojot īpašību pirms inicializācijas, rodas UninitializedPropertyAccessException.

//  lateinit izmantošanas piemērs
lateinit var lateinitVariable: String

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

fun useVariable() {
    //  Inicializācijas pārbaude pirms lietošanas (ieteicama, bet ne obligāta)
    if (::lateinitVariable.isInitialized) {
        println(lateinitVariable)
    } else {
        println("Mainīgais vēl nav inicializēts")
    }
}

Galvenās atšķirības:

Īpašība lazy lateinit
Īpašības tips val (lasāma) var (maināma)
Nulles vērtības iespēja Var būt nullable vai non-nullable Jābūt non-nullable
Inicializācija Automātiska, pirmās piekļuves laikā Rokas darbs
Aizkavēšana Jā, aprēķināta pirmās piekļuves laikā Jā, bez inicializācijas paziņojuma
Strāvas drošība Parasti, sinhronizācija, ir iespējas Nav garantēta, atkarīga no konteksta
Kļūda pirms piekļuves Nē, automātiski inicializējas UninitializedPropertyAccessException