Sobes.tech
Middle

'lazy' ва 'lateinit' дар Kotlin чӣ аст?

sobes.tech AI

Ҷавоб аз AI

lazy - делегат хусусияти барои оғозёбии таъхиршуда ва беиҷозат (val) хусусиятҳо. Қимат дар аввалин дастрасӣ ба хусусият ҳисоб карда мешавад ва сипас кеш карда мешавад.

// Масали истифодаи lazy
val lazyValue: String by lazy {
    println("Оғоз") // танҳо як бор дар аввалин дастрасӣ нишон дода мешавад
    "Салом, lazy!"
}

lateinit - модификатор барои хусусиятҳои тағйирёбанда (var), ки имкон медиҳад, ки оғозёбӣ то аввалин дастрасӣ ба таъхир гузошта шавад. Хусусият набояд null бошад. Истифодаи хусусият пеш аз оғозёбӣ ба UninitializedPropertyAccessException оварда мерасонад.

// Масали истифодаи lateinit
lateinit var lateinitVariable: String

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

fun useVariable() {
    // Санҷиши оғозёбӣ пеш аз истифода (опционалӣ, аммо тавсия дода мешавад)
    if (::lateinitVariable.isInitialized) {
        println(lateinitVariable)
    } else {
        println("Параметр ҳанӯз оғоз нашудааст")
    }
}

Асосӣ фарқиятҳо:

Хусусият lazy lateinit
Навъи хусусият val (фақат хондан) var (тағйирёбанда)
Nullability Мумкин аст nullable ё non-nullable Бояд non-nullable бошад
Оғозёбӣ Автоматик, дар аввалин дастрасӣ Дастӣ
Таъхир дар оғозёбӣ Бале, дар аввалин дастрасӣ Бале, бе оғозёбӣ эълон кардан
Бехатарии сӯрохиҳо Ба таври пешфарз бехатар дар сӯрохиҳо (синхронӣ), имконот мавҷуданд Гарантӣ нест, вобаста ба контекст
Исключение пеш аз дастрасӣ Не, автоматӣ оғоз мешавад UninitializedPropertyAccessException