Sobes.tech
Junior

Qu'est-ce que lazy ?

sobes.tech IA

Réponse de l'IA

Le mot-clé lazy est utilisé pour l'initialisation différée d'une propriété.

Une propriété avec lazy est initialisée uniquement lors de la première utilisation. Cela est utile pour:

  • La performance : si la création de l'objet nécessite beaucoup de ressources, mais pas toujours.
  • Éviter les dépendances cycliques lors de l'initialisation.
  • Travailler avec des ressources externes ou des données qui peuvent ne pas être disponibles lors de la création de l'objet.

Les propriétés lazy doivent être :

  • Des variables (var), car leur valeur peut changer lors de la première utilisation.
  • Ne pas avoir de observateurs de propriétés (willSet, didSet) jusqu'à la première utilisation.
class HeavyResource {
    init() {
        print("Ressource lourde initialisée")
        // Simulation d'une initialisation coûteuse
        Thread.sleep(forTimeInterval: 1)
    }
}

class MyPresenter {
    let name = "Presenter"

    // propriété lazy, initialisée lors de la première utilisation
    lazy var heavyResource: HeavyResource = {
        print("Création de la ressource lourde")
        return HeavyResource()
    }()

    init() {
        print("\(name) initialisé")
    }

    func accessResource() {
        print("Accès à la ressource lourde...")
        _ = heavyResource // L'initialisation de la propriété lazy se produit ici
        print("Ressource accédée.")
    }
}

// Initialiser le présentateur
let presenter = MyPresenter() // Sortie : Presenter initialized

// L'accès à la ressource se produit plus tard, lorsque cela est réellement nécessaire
presenter.accessResource()
/*
Sortie:
Accès à la ressource lourde...
Création de la ressource lourde
Ressource lourde initialisée
Ressource accédée.
*/

// L'accès répété ne provoque pas une réinitialisation
presenter.accessResource()
/*
Sortie:
Accès à la ressource lourde...
Ressource accédée.
*/