Sobes.tech
Junior

Lazy nima?

sobes.tech AI

AIdan javob

Kalit so'z lazy xususiyatning kechiktirilgan boshlanishi uchun ishlatiladi.

lazy bilan belgilangan xususiyat faqat birinchi marta unga kirishda boshlanadi. Bu quyular uchun foydalidir:

  • Ishlash tezligi: ob'ektni yaratish ko'p resurslarni talab qilsa, lekin har doim kerak bo'lmasa.
  • Boshlash paytida tsiklik bog'liqliklarni oldini olish.
  • Tashqi resurslar yoki ma'lumotlar bilan ishlash, ular ob'ekt yaratilganda mavjud bo'lmasligi mumkin.

lazy xususiyatlar quyidagilar bo'lishi kerak:

  • O'zgaruvchilar (var), chunki ularning qiymati birinchi kirishda o'zgarishi mumkin.
  • Birinchi kirishgacha xususiyat kuzatuvchilar (willSet, didSet) bo'lmasligi kerak.
class HeavyResource {
    init() {
        print("Og'ir resurs boshlatildi")
        // Resursga boy boshlashni simulyatsiya qilish
        Thread.sleep(forTimeInterval: 1)
    }
}

class MyPresenter {
    let name = "Presenter"

    // lazy xususiyat, birinchi foydalanishda boshlanadi
    lazy var heavyResource: HeavyResource = {
        print("Og'ir resurs yaratilyapti")
        return HeavyResource()
    }()

    init() {
        print("\(name) boshlatildi")
    }

    func accessResource() {
        print("Og'ir resursga kirish...")
        _ = heavyResource // Bu yerda lazy xususiyat boshlanadi
        print("Resursga kirildi")
    }
}

// Presenterni boshlash
let presenter = MyPresenter() // Chiqish: Presenter boshlatildi

// Resursga kirish keyinchalik, haqiqatan ham kerak bo'lsa
presenter.accessResource()
/*
Chiqish:
Og'ir resursga kirish...
Og'ir resurs yaratilyapti
Og'ir resurs boshlatildi
Resursga kirildi
*/

// Takroriy kirish, qayta boshlashni chaqirmaydi
presenter.accessResource()
/*
Chiqish:
Og'ir resursga kirish...
Resursga kirildi
*/