我假设纯函数必须始终具有返回类型(即,不能是void
)并且必须具有相同的输出,而不管对象的状态和Impure函数是否会更改对象的状态或打印对象的状态。
但我使用的教科书指出:
访问器通常包含return语句,但是打印有关对象状态的信息的方法也可以被归类为访问者。
我很困惑。哪一个是正确的?
修改
有点澄清,让我问的是这个问题:
最后一个问题是" 给出使用的功能类型"并且那里评论的人声称这是一个不纯的功能,因为它正在打印。
这个功能是纯粹的还是不纯的?
答案 0 :(得分:26)
内容取自this link
纯粹功能的特征:
纯函数的返回值完全取决于其参数 因此,如果使用相同的参数集调用纯函数,则始终会获得相同的返回值。
它们没有任何副作用,如网络或数据库调用
不纯函数的特征
不纯函数的返回值不仅取决于其参数 因此,如果使用相同的参数集调用不纯函数,则可能会获得不同的返回值 例如,Math.random(),Date.now()
它们可能有任何副作用,如网络或数据库调用
他们可能会修改传递给他们的参数
function impureFunc(value){
return Math.random() * value;
}
function pureFunc(value){
return value * value;
}
var impureOutput = [];
for(var i = 0; i < 5; i++){
impureOutput.push(impureFunc(5));
}
var pureOutput = [];
for(var i = 0; i < 5; i++){
pureOutput.push(pureFunc(5));
}
console.log("Impure result: " + impureOutput); // result is inconsistent however input is same.
console.log("Pure result: " + pureOutput); // result is consistent with same input
答案 1 :(得分:8)
从Wikipedia - 如果这两个关于函数的语句都成立,则函数可以被描述为纯函数:
因此,如果与您的代码相比,任何一个语句都是false,那么它就是不纯的。
答案 2 :(得分:3)
Mu.根据定义,您似乎假设访问者是纯函数。情况不一定 - 访问者(甚至是get
- 访问者返回值)可能不纯,例如get
LinkedHashMap
方法处于访问顺序模式时(它以迭代顺序将请求的条目移动到最后一个位置。)
答案 3 :(得分:2)
两个陈述都是正确的。
当您创建获取值的方法时,这些方法称为 ACCESSOR METHODS
<强> 实施例 强>
public String getName(){
return this.name;
}
对于设置值,我们使用 VOID 的方法,这些方法称为 MUTATOR METHODS
<强> 实施例 强>
public void setName(String n){
this.name=n;
}
答案 4 :(得分:1)
Impure Functions或Mutator方法更改对象的状态并修改存储在Instance Variables中的值。