函数与计算属性-使用什么?

如果任何调用被认为是昂贵的,会在多次调用时引发错误或返回不同的结果-首选函数。 如果调用便宜,则不会引发错误,不会返回相同的结果,也不会缓存第一次调用的结果-计算属性可能会满足您的需求。

– – – – – – – – – – – – – – 要么 – – – – – – – – – – – – – –

如果您的代码执行了某个动作并返回了例如该动作的结果的描述,那么您应该首选函数。 如果您的代码计算出一个属性,但是从用户的角度来看,这可能是一个存储的属性,或者可能是一个存储的属性,需要先更新某些缓存的值,那么您应该更喜欢计算的属性。

例如 ,我们有CookieFactory类来烘烤一些cookie。 我们需要它来查看成分并决定要制作哪种曲奇。 它需要检查有多少成分可用以确定批次大小。 然后,它将需要分割并创建cookie。 听起来很复杂,所以要使用函数是这里的方法。

遵循统一访问原则

模块提供的所有服务都应通过统一的符号表示,无论是通过存储还是通过计算实现,都不应背叛。

—伯特兰·迈耶(Bertrand Meyer)

属性表示实例的固有质量,而方法则执行操作。

  • 方法有参数; 属性没有。 对于有副作用的任何调用,最好使用方法。 如果某个方法执行某些操作(例如,它加载,解析,切换或打印)或具有动词名称,则它不应是属性。
  • 首选属性以获取和/或设置简单值。
  • 属性应表示类型实例的语义固有质量。

错误的计算属性示例:

–随机值

– 今天的日期

–来自另一个对象或单例的值

–格式化日期

–从服务器获取


很大的不同:如果两次调用函数或计算所得的属性,会发生什么? 对于计算的属性,我期望x =属性; y =属性与x =属性具有完全相同的行为; y = x,但运行速度可能会稍微慢一点。 对于函数,如果行为不同,我不会感到惊讶。

它还取决于计算的复杂性与使用频率。

  • 如果它是O(1)/ *,则使用计算属性。
  • 如果是O(N)+ /罕见,则使用函数。
  • 如果是O(N)+ /频繁使用,请考虑是否将来会决定使用缓存或其他“智能”技术来补偿复杂性,如果“是”,则使用属性,如果“否”,则使用只是沉重”,然后使用功能。

通常,仅在以下情况下才使用计算属性:

  • 不会抛出任何异常
  • 具有O(1)复杂度
  • 计算便宜(或在第一次运行时计算)
  • 通过调用返回相同的结果

如果任何调用被认为是昂贵的,会在多次调用时引发错误或返回不同的结果-首选函数。

如果调用便宜,则不会引发错误,不会返回相同结果,也不会缓存第一次调用的结果-计算属性可能会满足您的需求。

感谢您阅读文章。 如果您有任何疑问,请在下面的评论部分中添加。

您可以在以下位置找到我:

Linkedin: Aaina Jain

推特: __aainajain