Sobes.tech
Middle

Čo sú 'lazy' a 'lateinit' v Kotlin?

sobes.tech AI

Odpoveď od AI

lazy - delegát vlastnosti pre odloženého a nemenného (val) inicializácie vlastností. Hodnota sa vypočíta pri prvom prístupe k vlastnosti a potom sa cache-uje.

// Príklad použitia lazy
val lazyValue: String by lazy {
    println("Inicializácia") // bude zobrazené iba raz pri prvom prístupe
    "Ahoj, lazy!"
}

lateinit - modifikátor pre premenné (var) vlastnosti, ktorý umožňuje odložiť inicializáciu do prvého prístupu. Vlastnosť musí byť non-null. Použitie vlastnosti pred inicializáciou spôsobí UninitializedPropertyAccessException.

// Príklad použitia lateinit
lateinit var lateinitVariable: String

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

fun useVariable() {
    // Kontrola, či je inicializovaná pred použitím (voliteľné, ale odporúčané)
    if (::lateinitVariable.isInitialized) {
        println(lateinitVariable)
    } else {
        println("Premenná ešte nie je inicializovaná")
    }
}

Hlavné rozdiely:

Funkcia lazy lateinit
Typ vlastnosti val (len na čítanie) var (meniteľná)
Nullovateľnosť Môže byť nullable alebo non-nullable Musí byť non-nullable
Inicializácia Automatická, pri prvom prístupe Rukovacia
Odložená inicializácia Áno, pri prvom prístupe Áno, deklarácia bez inicializácie
Bezpečnosť vlákien Predvolene bezpečné (synchronizácia), existujú možnosti Nie je garantované, závisí od kontextu
Výnimka pri prístupe pred inicializáciou Nie, automaticky sa inicializuje UninitializedPropertyAccessException