Avatar ·

Inicialización de propiedades en Kotlin: `by lazy` vs `lateinit` — ¿cuándo usar cuál?

¡Hola a todos! Estoy migrando de Java a Kotlin y me encontré con la falta de comprensión de la diferencia entre `by lazy` y `lateinit` para la inicialización diferida de propiedades. Parece que ambos resuelven el mismo problema: no inicializar la propiedad inmediatamente al crear el objeto, sino hacerlo más tarde, cuando realmente se necesite. Pero constantemente me confundo sobre qué opción elegir. Por ejemplo, estoy escribiendo un simple Android ViewModel. Necesito obtener una referencia al repositorio, que se inicializa a través de DI (Dagger/Hilt), pero no quiero hacerla nullable: ```kotlin // Opción con lateinit class MyViewModel : ViewModel() { lateinit var repository: MyRepository fun loadData() { // Aquí estoy seguro de que repository ya está inicializado repository.fetchData() } } ``` ```kotlin // Opción con lazy class MyViewModel : ViewModel() { val repository: MyRepository by lazy { MyRepository() // O alguna fábrica } } ``` En el primer caso, debo llamar a `repository = ...` en algún lugar antes de us