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) // Հաշվարկ հատկության
// Հաշվարկված արժեք
Այսպիսով, նեղված հատկությունը պահում է արդյունքը առաջին հաշվարկից հետո, իսկ հաշվարկվողը ամեն անգամ նորից հաշվարկվում է։