Sobes.tech
Middle

Kotlin'da 'lazy' va 'lateinit' nima?

sobes.tech AI

AIdan javob

lazy - mülkiyyətin təxirə salınmış və dəyişməz (val) xüsusiyyətləri üçün mülkiyyət nümayəndəsidir. Dəyər ilk müraciətdə hesablanır və sonra keşikdə saxlanılır.

// Lazy istifadə nümunəsi
val lazyValue: String by lazy {
    println("İnitializasiya") // ilk müraciətdə yalnız bir dəfə göstəriləcək
    "Salam, lazy!"
}

lateinit - dəyişkən (var) xüsusiyyətlər üçün modifikator, ilk girişə qədər inisializasiya etməyi gecikdirməyə imkan verir. Xüsusiyyət null olmamalıdır. İnisializasiya olmadan istifadə UninitializedPropertyAccessException ilə nəticələnir.

// lateinit istifadə nümunəsi
lateinit var lateinitVariable: String

fun initializeVariable() {
    lateinitVariable = "Salam, lateinit!"
}

fun useVariable() {
    // İstifadədən əvvəl inisializasiya yoxlaması (seçimlidir, amma tövsiyə olunur)
    if (::lateinitVariable.isInitialized) {
        println(lateinitVariable)
    } else {
        println("Dəyişən hələ inisializasiya olunmayıb")
    }
}

Əsas fərqlər:

Xüsusiyyət lazy lateinit
Xüsusiyyət tipi val (yalnız oxumaq üçün) var (dəyişkən)
Nullability Nullable və ya non-nullable ola bilər Non-nullable olmalıdır
İnisializasiya Avtomatik, ilk girişdə Əl ilə
Gecikmiş inisializasiya Bəli, ilk girişdə Bəli, inisializasiyadan sonra elan edilir
İplə təhlükəsizlik Əsasən təhlükəsiz (sinxronizasiya), seçimlər mövcuddur Garanli deyil, kontekstdən asılıdır
Girişdən əvvəl istisna Xeyr, avtomatik inisializasiya olunur UninitializedPropertyAccessException