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
*/