Sobes.tech
Junior

Ի՞նչ է lazy-ը։

sobes.tech AI

Պատասխան AI-ից

Բառային բանալի lazy օգտագործվում է հատկության ուշացման սկզբնավորելու համար:

lazy հատկությունը սկզբնավորվում է միայն առաջին մուտքի ժամանակ: Սա օգտակար է, երբ:

  • Աշխատանքային արդյունավետություն՝ եթե օբյեկտի ստեղծումը պահանջում է շատ ռեսուրսներ, բայց ոչ միշտ:
  • Ցիկլային կախվածությունների կանխում՝ սկզբնավորման ժամանակ:
  • Աշխատանք արտաքին ռեսուրսների կամ տվյալների հետ, որոնք կարող են չլինել հասանելի օբյեկտի ստեղծման ժամանակ:

lazy հատկությունները պետք է լինեն՝

  • Փոփոխականներ (var), քանի որ նրանց արժեքը կարող է փոխվել առաջին մուտքի ժամանակ:
  • Չպետք է ունենան դիտորդներ (willSet, didSet) մինչև առաջին մուտքը:
class HeavyResource {
    init() {
        print("Բարդ ռեսուրսը սկզբնավորվեց")
        // Նմանեցում ծախսատար սկզբնավորելու համար
        Thread.sleep(forTimeInterval: 1)
    }
}

class MyPresenter {
    let name = "Prezentator"

    // `lazy` հատկություն, սկզբնավորվում է առաջին օգտագործման ժամանակ
    lazy var heavyResource: HeavyResource = {
        print("Բարդ ռեսուրսի ստեղծում")
        return HeavyResource()
    }()

    init() {
        print("\(name) սկզբնավորվեց")
    }

    func accessResource() {
        print("Մուտք բարդ ռեսուրս...")
        _ = heavyResource // Այստեղ տեղի է ունենում `lazy` հատկության սկզբնավորումը
        print("Ռեսուրսը հասանելի է")
    }
}

// Նախագծողի սկզբնավորում
let presenter = MyPresenter() // Արտածում՝ Prezentator սկզբնավորվեց

// Ռեսուրսին մուտք գործելը ավելի ուշ, երբ այն իսկապես անհրաժեշտ է
presenter.accessResource()
/*
Արտածում՝
Մուտք բարդ ռեսուրս...
Բարդ ռեսուրսի ստեղծում
Բարդ ռեսուրսը սկզբնավորվեց
Ռեսուրսը հասանելի է
*/

// Կրկնակի մուտքը չի առաջացնում նոր սկզբնավորում
presenter.accessResource()
/*
Արտածում՝
Մուտք բարդ ռեսուրս...
Ռեսուրսը հասանելի է
*/