繁体   English   中英

术语:您称什么为不会更改对象状态的函数?

[英]Terminology: What do you call a function that does not change object state?

例如,我有一个Employee类,具有getName()pay()函数。 第一个函数只是返回人员名称(不可变的属性),但是第二个函数会显着更改对象(例如,从不同的线程调用此第二个函数很不好)。

是否存在不更改对象状态(例如getName()的函数的术语? 不变类中的所有函数都将具有此属性。

我认为这种功能没有全球认可的术语。

也许“无副作用”和“纯净”接近您想要的状态,但是它们表示该函数不会更改任何状态(您调用它的对象以及任何其他对象均不会改变)。

“纯”一词来自功能编程领域,表示函数的返回值仅取决于其参数的值。 在面向对象的编程中,通常也将调用它的对象视为输入参数之一,以便将属性获取器视为“纯”函数。

对此没有特殊的命名。 预期合理的事情是,一个名为“getSomething()”方法应该没有副作用。 除此之外,对于不可变属性,它应始终返回相同的结果。

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

不管是好是坏,Java都没有一个“ const”关键字的概念,该关键字可以用来明确某种方法是无副作用的。

此外,从设计的角度来看:您应该考虑使Employee类完全不可变 从某种意义上说:为什么调用“ pay”方法应该更改Employee对象中的任何内容? 当我收到薪水时,银行帐户会增加,但是我(员工)不会因此而改变!

从这个意义上讲:您可能正在网上搜索Robert Martin的“敏捷实践”。 他为真实的Employee / Payroll应用程序进行了扩展的全面 OO设计。 (并提示:C#版本PDF似乎是免费提供的)。

“查询”类似于Command-Query-Separation原理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM