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 |