Middle
¿Qué son 'lazy' y 'lateinit' en Kotlin?
sobes.tech AI
Respuesta de la IA
lazy - delegado de propiedad para la inicialización perezosa de propiedades inmutables (val). El valor se calcula en la primera referencia a la propiedad y luego se almacena en caché.
// Ejemplo de uso de lazy
val lazyValue: String by lazy {
println("Inicialización") // se mostrará solo una vez en la primera referencia
"¡Hola, lazy!"
}
lateinit - modificador para propiedades mutables (var), que permite retrasar la inicialización hasta el primer acceso. La propiedad debe ser no nula. Usar la propiedad antes de la inicialización provoca una UninitializedPropertyAccessException.
// Ejemplo de uso de lateinit
lateinit var lateinitVariable: String
fun initializeVariable() {
lateinitVariable = "¡Hola, lateinit!"
}
fun useVariable() {
// Verificación de inicialización antes de usar (opcional, pero recomendable)
if (::lateinitVariable.isInitialized) {
println(lateinitVariable)
} else {
println("La variable aún no está inicializada")
}
}
Diferencias principales:
| Característica | lazy |
lateinit |
|---|---|---|
| Tipo de propiedad | val (solo lectura) |
var (mutable) |
| Nullable | Puede ser nullable o no nullable | Debe ser no nullable |
| Inicialización | Automática, en el primer acceso | Manual |
| Retardo en la inicialización | Sí, en el primer acceso | Sí, declaración sin inicialización |
| Seguridad en hilos | Por defecto seguro en hilos (sincronización), hay opciones | No garantizado, depende del contexto |
| Excepción al acceder antes de inicializar | No, se inicializa automáticamente | UninitializedPropertyAccessException |