Sobes.tech
Middle

Ce sunt 'lazy' și 'lateinit' în Kotlin?

sobes.tech AI

Răspuns de la AI

lazy - delegat de proprietate pentru inițializarea întârziată a proprietăților imutabile (val). Valoarea este calculată la prima accesare a proprietății și apoi cache-ată.

// Exemplu de utilizare lazy
val lazyValue: String by lazy {
    println("Inițializare") // va fi afișat o singură dată la prima accesare
    "Salut, lazy!"
}

lateinit - modificator pentru proprietăți mutabile (var), care permite amânarea inițializării până la primul acces. Proprietatea trebuie să fie non-null. Utilizarea proprietății înainte de inițializare duce la o UninitializedPropertyAccessException.

// Exemplu de utilizare lateinit
lateinit var lateinitVariable: String

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

fun useVariable() {
    // Verificare dacă a fost inițializată înainte de utilizare (opțional, dar recomandat)
    if (::lateinitVariable.isInitialized) {
        println(lateinitVariable)
    } else {
        println("Variabila nu a fost încă inițializată")
    }
}

Diferențe principale:

Caracteristică lazy lateinit
Tipul proprietății val (doar citire) var (mutabil)
Nullabilitate Poate fi nullable sau non-nullable Trebuie să fie non-nullable
Inițializare Automată, la prima accesare Manual
Întârzierea inițializării Da, la prima accesare Da, declarație fără inițializare
Siguranța thread-urilor În mod implicit thread-safe (sincronizare), există opțiuni Nu garantat, depinde de context
Excepție la accesul înainte de inițializare Nu, se inițializează automat UninitializedPropertyAccessException