Sobes.tech
Middle

Šta su 'lazy' i 'lateinit' u Kotlinu?

sobes.tech АИ

Одговор од АИ

lazy - delegat svojstva za odloženu i nepromenjivu (val) inicijalizaciju svojstava. Vrednost se računa pri prvom pristupu svojstvu i zatim kešira.

// Primer korišćenja lazy
val lazyValue: String by lazy {
    println("Inicijalizacija") // biće prikazano samo jednom pri prvom pristupu
    "Zdravo, lazy!"
}

lateinit - modifikator za promenljive (var) svojstva, koji omogućava odlaganje inicijalizacije do prvog pristupa. Svojstvo mora biti non-null. Korišćenje svojstva pre inicijalizacije dovodi do UninitializedPropertyAccessException.

// Primer korišćenja lateinit
lateinit var lateinitVariable: String

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

fun useVariable() {
    // Provera da li je inicijalizovano pre korišćenja (opciono, ali preporučljivo)
    if (::lateinitVariable.isInitialized) {
        println(lateinitVariable)
    } else {
        println("Promenljiva još nije inicijalizovana")
    }
}

Glavne razlike:

Osobina lazy lateinit
Tip svojstva val (samo za čitanje) var (promenjivo)
Nullability Može biti nullable ili non-nullable Mora biti non-nullable
Inicijalizacija Automatska, pri prvom pristupu Rucna
Odlaganje inicijalizacije Da, pri prvom pristupu Da, deklaracija bez inicijalizacije
Bezbednost u više niti Podrazumevano sigurno (sinhronizacija), postoje opcije Nije garantovano, zavisi od konteksta
Izuzetak pri pristupu pre inicijalizacije Ne, automatski se inicijalizuje UninitializedPropertyAccessException