Sobes.tech
Junior — Middle

Ի՞նչ տարբերություններ կան դանդաղորեն իրականացվող հատկությունների և այն հատկությունների միջև, որոնք հաշվարկվում են վայրկենապես։

sobes.tech AI

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

Նեղված հատկությունները (lazy properties) և հաշվարկվող հատկությունները (computed properties) տարբեր են արժեքի սկզբնավորման ձևով և ժամանակով.

  • Նեղված հատկությունները սկզբնավորում են միայն առաջին մուտքի ժամանակ: Արժեքը պահվում է և հաջորդ մուտքերում վերադարձվում է արդեն պահված արժեքը: Սա հարմար է, եթե սկզբնավորումը ծախսատար է ռեսուրսների համար և միշտ անհրաժեշտ չէ:

  • Հաշվարկվող հատկությունները չեն պահում արժեքը, այլ ամեն անգամ երբ մուտք են գործում, այն նորից հաշվարկում են: Դրանք սովորաբար իրականացվում են getter-ների (և setter-ների) միջոցով և չեն պահանջում լրացուցիչ հիշողություն:

Նմուշ Swift-ում:

class Example {
    lazy var lazyValue: String = {
        print("Նեղված հատկության սկզբնավորում")
        return "Նեղված արժեք"
    }()

    var computedValue: String {
        print("Հաշվարկ հատկության")
        return "Հաշվարկված արժեք"
    }
}

let example = Example()
// lazyValue դեռ չի սկզբնավորվել
print(example.lazyValue) // Նեղված հատկության սկզբնավորում
                        // Նեղված արժեք
print(example.lazyValue) // Նեղված արժեք (միայն առաջին անգամ)

print(example.computedValue) // Հաշվարկ հատկության
                             // Հաշվարկված արժեք
print(example.computedValue) // Հաշվարկ հատկության
                             // Հաշվարկված արժեք

Այսպիսով, նեղված հատկությունը պահում է արդյունքը առաջին հաշվարկից հետո, իսկ հաշվարկվողը ամեն անգամ նորից հաշվարկվում է։