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 |