Sobes.tech
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()
    }
}