Sobes.tech
Middle

Kotlin'da 'lateinit' va 'by lazy' ni qachon ishlatish kerak?

sobes.tech AI

AIdan javob

lateinit ishlatiladi nullable bo'lmagan xususiyatlar uchun, ular keyinchalik, birinchi kirishdan oldin boshlanadi. var bilan qo'llaniladi.

class UserActivity : AppCompatActivity() {
    lateinit var binding: ActivityUserBinding // onCreate da boshlanadi

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityUserBinding.inflate(layoutInflater)
        setContentView(binding.root)
        // Endi bindingdan foydalanish mumkin
    }
}

by lazy nullable yoki nullable bo'lmagan xususiyatlar uchun ishlatiladi, ular birinchi kirishda boshlanadi. val bilan qo'llaniladi.

class DataManager {
    val apiService: ApiService by lazy {
        Retrofit.Builder()
            .baseUrl("https://api.example.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(ApiService::class.java)
    }
}

Taqqoslash:

Xususiyat lateinit by lazy
Qo'llanilishi var val
Xususiyat turi Nullable bo'lmagan Nullable yoki nullable bo'lishi mumkin
Boshlanishi Keyinchalik, qo'lda Birinchi kirishda, avtomatik
Ipga xavfsizlik Standartda ta'minlanmagan (qo'lda sinxronlashtirish kerak bo'lishi mumkin) Standartda ta'minlangan (sinxronlashtirilgan)
Null qiymat Boshlashdan oldin ruxsat etilmaydi (xato chiqaradi) Yo'q (tip boshlovchi bilan aniqlanadi)

lateinit ni foydalaning, agar xususiyat qiymati kontekstga yoki boshqa omillarga bog'liq bo'lsa va ob'ekt yaratildan keyin, lekin foydalanishdan oldin o'rnatilishi kerak bo'lsa (masalan, Android Activity da View ni bog'lash).

by lazy ni foydalaning, agar xususiyatlar yaratishda qimmat bo'lsa yoki butun ob'ekt hayoti davomida kerak bo'lmasligi mumkin, yoki boshlang'ich qiymatni faqat birinchi foydalanishdan keyin belgilashni istasangiz.