Sobes.tech
Middle

Qu'est-ce que 'lazy' et 'lateinit' en Kotlin?

sobes.tech IA

Réponse de l'IA

lazy - délégué de propriété pour l'initialisation paresseuse des propriétés immuables (val). La valeur est calculée lors de la première référence à la propriété, puis mise en cache.

// Exemple d'utilisation de lazy
val lazyValue: String by lazy {
    println("Initialisation") // affiché une seule fois lors de la première référence
    "Bonjour, lazy!"
}

lateinit - modificateur pour propriétés mutables (var), permettant de retarder l'initialisation jusqu'au premier accès. La propriété doit être non nulle. Utiliser la propriété avant l'initialisation entraîne une UninitializedPropertyAccessException.

// Exemple d'utilisation de lateinit
lateinit var lateinitVariable: String

fun initializeVariable() {
    lateinitVariable = "Bonjour, lateinit!"
}

fun useVariable() {
    // Vérification de l'initialisation avant utilisation (optionnel, mais recommandé)
    if (::lateinitVariable.isInitialized) {
        println(lateinitVariable)
    } else {
        println("La variable n'est pas encore initialisée")
    }
}

Principales différences:

Caractéristique lazy lateinit
Type de propriété val (lecture seule) var (mutable)
Nullabilité Peut être nullable ou non nullable Doit être non nullable
Initialisation Automatique, lors de la première utilisation Manuelle
Retard d'initialisation Oui, lors de la première utilisation Oui, déclaration sans initialisation
Sécurité thread Par défaut thread-safe (synchronisation), options disponibles Non garanti, dépend du contexte
Exception lors d'une utilisation avant initialisation Non, initialisé automatiquement UninitializedPropertyAccessException