Java 术语:不改变对象状态的函数叫什么?

Java 术语:不改变对象状态的函数叫什么?,java,oop,functional-programming,Java,Oop,Functional Programming,例如,我有一个类Employee,其中包含函数getName()和pay()。第一个函数只返回人名(一个不可变属性),但第二个函数会显著更改对象(例如,从不同线程调用第二个函数是不好的) 是否有一个术语表示不改变对象状态的函数,例如getName()?不可变类中的所有函数都将具有此属性。与命令查询分离原则中的“查询”类似。与命令查询分离原则中的“查询”类似。没有特殊的命名。所期望的合理的是一个名为“getSomething()”的方法应该没有副作用。此外,对于不可变属性,它应该始终返回相同的结果

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


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

与命令查询分离原则中的“查询”类似。

与命令查询分离原则中的“查询”类似。

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

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

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

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


从这个意义上说:你可以在网上搜索罗伯特·马丁的“敏捷实践”。他为现实世界中的员工/工资单应用程序进行扩展的全尺寸OO设计。(提示:C版本的PDF似乎是免费的)。

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

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

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

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


从这个意义上说:你可以在网上搜索罗伯特·马丁的“敏捷实践”。他为现实世界中的员工/工资单应用程序进行扩展的全尺寸OO设计。(提示:C#版本的PDF似乎是免费的)。

我认为没有一个全球公认的术语来描述这种功能

也许“无副作用”和“纯”与您想要的很接近,但它们意味着函数不会改变任何状态(无论是您调用它的对象,还是任何其他对象)


“pure”一词来自函数编程世界,意思是函数的返回值仅取决于其参数的值。在面向对象的程序设计中,通常也把调用它的对象看作是输入参数之一,因此属性吸收器可以被看作是“纯”函数。

< P>我不认为有这样一个函数具有全局性的术语。p> 也许“无副作用”和“纯”与您想要的很接近,但它们意味着函数不会改变任何状态(无论是您调用它的对象,还是任何其他对象)


“pure”一词来自函数编程世界,意思是函数的返回值仅取决于其参数的值。在面向对象的程序设计中,通常也会把调用它的对象看作输入参数之一,因此属性吸收器可以被看作是“纯”函数。

基本上,您在爪哇中寻找const等价物。Java中没有与C常量“类型修饰符”等价的东西(遗憾的是),基本上,您正在寻找Java中的常量等价物。Java中没有与C const“type modifier”等价的东西(遗憾的是)。谢谢,这正是我想要的。谢谢,这正是我想要的。谢谢你的输入。Employee类是一个人为的例子。我对术语很感兴趣,这样我可以更简洁地记录调用函数时可能存在的危险。谢谢您的输入。Employee类是一个人为的例子。我对术语很感兴趣,所以当调用函数可能有潜在危险时,我可以更简洁地记录。