为什么惰性变量/计算属性,而不仅仅是方法
Why lazy variables / computed properties, not just methods
为什么 Swift 有 "lazy variables" 和 "computed properties" 的概念,而简单的 方法或函数 似乎适用于目的?
在computing Pi, shouldn't this have been a method instead? And the same in this case的耗时情况下。为什么要强制某些东西成为 variable/property 显然更复杂?
答案: 惰性变量的存在是为了减少加载时间(即出于优化原因)。除非明确要求,否则不需要立即使用某些变量。而他们,像 Math.pi
可能需要一段时间来计算。因此,当最重要的用户启动的操作完成时,应用程序可能会在后台线程中开始计算它们。
至于计算属性,我认为这更像是一种语言决定。 Objective-C 很久以前就引入了属性,从技术上讲,它们一直是 'computed'(带有 getter 和 setter,无论是自动合成还是显式实现),它是(并且 是) 一个广为接受的功能。为什么?我不确定。也许这个问题没有'one clear answer'。就像我说的,我相信这是一个语言决定,而不是可以完全合理化的东西。
就我个人而言,使用相同的 .property
语法而不是 property()
和 setProperty(_: Property)
函数来读写 属性 感觉更直观。这是一种抽象,存在语言抽象是为了舒适/易于使用。您的示例是高度人为设计的,并且计算属性被 Apple 框架中的数千个使用。并非每个计算的 属性 都需要非常耗时,而且实际上大多数都是即时的;因此他们被抽象出来了。
当你想到它时,一切都是技术上计算出来的。例如,即使您直接将整数值设置为结构字段,也有一些事情需要在较低的规模上发生。这些低级计算被抽象为感觉像非计算的具体实体,而实际上它们是。这一切都归结为 抽象。
为什么 Swift 有 "lazy variables" 和 "computed properties" 的概念,而简单的 方法或函数 似乎适用于目的?
在computing Pi, shouldn't this have been a method instead? And the same in this case的耗时情况下。为什么要强制某些东西成为 variable/property 显然更复杂?
答案: 惰性变量的存在是为了减少加载时间(即出于优化原因)。除非明确要求,否则不需要立即使用某些变量。而他们,像 Math.pi
可能需要一段时间来计算。因此,当最重要的用户启动的操作完成时,应用程序可能会在后台线程中开始计算它们。
至于计算属性,我认为这更像是一种语言决定。 Objective-C 很久以前就引入了属性,从技术上讲,它们一直是 'computed'(带有 getter 和 setter,无论是自动合成还是显式实现),它是(并且 是) 一个广为接受的功能。为什么?我不确定。也许这个问题没有'one clear answer'。就像我说的,我相信这是一个语言决定,而不是可以完全合理化的东西。
就我个人而言,使用相同的 .property
语法而不是 property()
和 setProperty(_: Property)
函数来读写 属性 感觉更直观。这是一种抽象,存在语言抽象是为了舒适/易于使用。您的示例是高度人为设计的,并且计算属性被 Apple 框架中的数千个使用。并非每个计算的 属性 都需要非常耗时,而且实际上大多数都是即时的;因此他们被抽象出来了。
当你想到它时,一切都是技术上计算出来的。例如,即使您直接将整数值设置为结构字段,也有一些事情需要在较低的规模上发生。这些低级计算被抽象为感觉像非计算的具体实体,而实际上它们是。这一切都归结为 抽象。