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