Sobes.tech
Junior

Lazy nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Açar söz lazy xüsusiyyətin gecikdirilmiş başlanması üçün istifadə olunur.

lazy ilə təyin olunan xüsusiyyət yalnız ilk girişdə başlanır. Bu, aşağıdakı hallarda faydalıdır:

  • Performans: əgər obyektin yaradılması çox resurs tələb edirsə, amma hər zaman lazım deyilsə.
  • Başlanğıc zamanı döngüsel asılılıqları qarşısını almaq.
  • Xarici resurslar və ya məlumatlar ilə işləmək, onlar obyekt yaradılarkən mövcud olmaya bilər.

lazy xüsusiyyətlər aşağıdakılar olmalıdır:

  • Dəyişənlər (var), çünki onların dəyəri ilk girişdə dəyişə bilər.
  • İlk girişə qədər müşahidəçilər (willSet, didSet) olmamalıdır.
class HeavyResource {
    init() {
        print("Çəkli resurs başlatıldı")
        // Çox resurs tələb edən başlanğıcı simulasiya edir
        Thread.sleep(forTimeInterval: 1)
    }
}

class MyPresenter {
    let name = "Presenter"

    // lazy xüsusiyyət, ilk istifadə zamanı başlatılır
    lazy var heavyResource: HeavyResource = {
        print("Çəkli resurs yaradılır")
        return HeavyResource()
    }()

    init() {
        print("\(name) başlatıldı")
    }

    func accessResource() {
        print("Çəkli resursa daxil olun...")
        _ = heavyResource // Burada lazy xüsusiyyətin başlanması baş verir
        print("Resurs əldə edildi")
    }
}

// Presenter-i başlatırıq
let presenter = MyPresenter() // Çıxış: Presenter başlatıldı

// Resursa giriş daha sonra, ehtiyac olduqda
presenter.accessResource()
/*
Çıxış:
Çəkli resursa daxil olun...
Çəkli resurs yaradılır
Çəkli resurs başlatıldı
Resurs əldə edildi
*/

// Təkrarlanan giriş yenidən başlanmanı çağırmır
presenter.accessResource()
/*
Çıxış:
Çəkli resursa daxil olun...
Resurs əldə edildi
*/