为啥惰性变量/计算属性,而不仅仅是方法
Posted
技术标签:
【中文标题】为啥惰性变量/计算属性,而不仅仅是方法【英文标题】:Why lazy variables / computed properties, not just methods为什么惰性变量/计算属性,而不仅仅是方法 【发布时间】:2016-07-16 22:46:37 【问题描述】:为什么 Swift 有“惰性变量”和“计算属性”的概念,而简单的 方法或函数 似乎适合此目的?
在computing Pi这种耗时的情况下,这不应该是一种方法吗?在this case 中也是如此。为什么要强制某些东西成为显然更复杂的变量/属性?
【问题讨论】:
见here。很相关…… 【参考方案1】:答案:存在延迟变量以缩短加载时间(即出于优化原因)。除非明确要求,否则不需要立即使用某些变量。他们,比如Math.pi
,可能需要一段时间来计算。因此,当最重要的用户启动操作完成时,应用程序可能会在后台线程中开始计算它们。
至于计算属性,我认为这更像是一种语言决定。 Objective-C 很久以前就引入了属性,它们在技术上一直是“计算的”(使用 getter 和 setter,无论是自动合成/显式实现),而且它是(并且 是)广泛接受的功能。为什么?我不确定。也许这个问题没有“一个明确的答案”。就像我说的,我相信这是一个语言决定,而不是可以完全合理化的东西。
就我个人而言,使用相同的.property
语法而不是property()
和setProperty(_: Property)
函数来读取和写入属性感觉更直观。这是一种抽象,语言抽象是为了舒适/易用而存在的。您的示例非常做作,并且 Apple 框架中的数千个使用计算属性。并非每个计算属性都需要非常耗时,实际上它们中的大多数实际上是即时的;因此他们被抽象成这样。
当您考虑它时,一切都是从技术上计算出来的。例如,即使您将整数值直接设置为结构字段,也有一些事情需要在较小的范围内发生。这些低级计算被抽象为感觉就像是非计算的具体实体,而实际上它们是。这一切都归结为抽象。
【讨论】:
以上是关于为啥惰性变量/计算属性,而不仅仅是方法的主要内容,如果未能解决你的问题,请参考以下文章