Sobes.tech
Middle

Kotlinде 'lazy' жана 'lateinit' эмнелер?

sobes.tech AI

AIден жооп

lazy - булгалоо өзгөрүлгүчтөрдүн (read-only) кечиктирилген жана баштапкы эмес (immutable) мүлктөрдүн (val) делегаты. Маани биринчи жолу мүлккө кайрылганда эсептелип, андан соң кэштелет.

//  Lazy колдонуу мисалы
val lazyValue: String by lazy {
    println("Баштоо") // биринчи кайрылганда гана чыгат
    "Салам, lazy!"
}

lateinit - өзгөрүлмө (mutable) мүлктөр (var) үчүн модификатор, ал биринчи кайрылууга чейин баштапкылоо мүмкүнчүлүгүн берет. Мүлк нөлгө барабар болбошу керек. Баштапкылоо алдында мүлккө кайрылуу UninitializedPropertyAccessException менен аяктайт.

//  lateinit колдонуу мисалы
lateinit var lateinitVariable: String

fun initializeVariable() {
    lateinitVariable = "Салам, lateinit!"
}

fun useVariable() {
    //  Баштапкылоо текшерүү (опционалдуу, бирок сунушталат)
    if (::lateinitVariable.isInitialized) {
        println(lateinitVariable)
    } else {
        println("Мүлк дагы баштапкыланбады")
    }
}

Негизги айырмачылыктар:

Өзгөчөлүк lazy lateinit
Мүлктүн түрү val (окуу гана) var (өзгөрүлмө)
Нөлгө барабардык Болушу мүмкүн, нөл эмес же нөлгө барабар эмес Болбошу керек, нөлгө барабар болбойт
Баштапкылоо Автоматтык, биринчи кайрылууда Кол менен баштапкылоо
Кечиктирүү Ооба, биринчи кайрылууда эсептелет Ооба, баштапкылоо жок жарыялоо
Туташтык коопсуздугу Дайыма туташтыкта (синхрондоштуруу), опциялар бар Кепилденбейт, контекстке көз каранды
Баштапкылоого чейин кайрылганда ката Жок, автоматтык түрдө башталат UninitializedPropertyAccessException