Middle
Фарқи байни истифодаи калимаи 'lateinit' ва вогузории бо 'by lazy {}' дар Kotlin чист?
sobes.tech AI
Ҷавоб аз AI
lateinit барои таъхир дар оғоз кардани хусусиятҳои тағйирёбанда (var) истифода мешавад, ки наметавонанд null бошанд ва баъдан, масалан, дар усули давраии ҳаёти фаъолият ё фрагмент оғоз меёбанд. Компилятор кафолат намедиҳад, ки оғоз мешавад, ва дастрасӣ ба хусусияти бе оғозкардашуда истиснои UninitializedPropertyAccessException-ро ба вуҷуд меорад.
by lazy {} барои оғоз кардани таъхирии хусусиятҳои бе тағйирёбанда (val) истифода мешавад. Оғоз дар аввалин дастрасӣ ба хусусият анҷом меёбад ва натиҷа дар кеш нигоҳ дошта мешавад. Ин дар асоси стандарт бехатар барои сӯзишворӣ ва кафолат медиҳад, ки инициализатор танҳо як маротиба даъват мешавад.
| Хусусият | lateinit |
by lazy {} |
|---|---|---|
| Мавҷудият | var |
val |
| Nullability | Не nullable | Не nullable |
| Гарантии оғоз | Не (танҳо аз тарафи таҳиягар) | Бале (дар аввалин дастрасӣ) |
| Бехатарии сӯзишворӣ | Нагарантӣ дар асоси стандарт | Бале (дар асоси стандарт) |
| Навъи хусусият | Тағйирёбанда | Нагузошташуда |
Намуна бо lateinit:
class MyActivity : AppCompatActivity() {
private lateinit var textView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textView = findViewById(R.id.my_text_view)
textView.text = "Салом, lateinit!"
}
}
Намуна бо by lazy {}:
class MyViewModel : ViewModel() {
private val apiService: ApiService by lazy { provideApiService() } // Дар аввал истифода мешавад
private fun provideApiService(): ApiService {
// Логикаи сохтани ApiService
return ApiService()
}
fun fetchData() {
// apiService дар ин ҷо дар аввал даъват fetchData() оғоз меёбад
apiService.getData()
}
}