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 |