术语:你怎么称呼不改变对象状态的函数?

时间:2016-09-20 08:29:35

标签: java oop functional-programming

例如,我有一个类RichTextBox.HideSelection = true,其中包含函数EmployeegetName()。第一个函数只返回人名(一个不可变属性),但第二个函数显着改变了对象(因此从不同的线程调用第二个函数是不好的)。

是否有一个函数的术语不会改变对象状态,例如pay()?不可变类中的所有函数都将具有此属性。

3 个答案:

答案 0 :(得分:1)

我不认为这种功能有一个全球性的术语。

可能"无副作用"和"纯粹"接近你想要的,但它们意味着该函数不会改变任何状态(你调用它的对象,也不改变任何其他对象)。

单词" pure"来自函数式编程世界,意味着函数的返回值仅取决于其参数的值。在面向对象的编程中,通常还要将您调用它的对象视为输入参数之一,以便将属性getter视为" pure"功能

答案 1 :(得分:0)

没有特别的命名。 期望合理是指一个名为" getSomething()"的方法。应该没有副作用。除此之外,对于不可变属性,它应该总是返回相同的结果。

换句话说:当您实现此类方法时,您以确认这些规则的方式编写它们。 (这也以某种方式告诉你不要通过在某处做一些lazy-init来做过早优化;在第一次调用方法时避免副作用!)

无论好坏,Java都没有" const"可用于明确某种方法是无副作用的关键字。

此外,从设计的角度来看:您应该考虑使您的Employee类完全不可变。在这个意义上:为什么要调用"支付"方法改变Employee对象中的任何内容?!当我收到工资时,通过银行账户上涨,但我,员工,我不会因此而改变!

从这个意义上说:你可以在网上寻找敏捷实践"罗伯特马丁。他为现实世界的Employee / Payroll应用程序进行了扩展的全面 OO设计。 (并提示:C#版本PDF似乎是免费提供的。)

答案 2 :(得分:-2)

“查询”,如命令 - 查询 - 分离原则。