Sobes.tech
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