我假设纯函数必须总是有一个返回类型(即,不能是 void
)并且无论对象的状态如何都必须有相同的输出,并且 Impure 函数改变了状态对象或打印对象的状态。
但我使用的教科书指出:
An accessor usually contains a return statement, but a method that prints information about an objects state may also be classified as an accessor.
我很困惑。哪一个是正确的?
编辑
澄清一点,让我问的是这个问题:
最后一个问题是“给出使用的函数类型”,那里评论的人说这是一个不纯的函数,因为它正在打印。
那么这个函数是纯的还是不纯的?
最佳答案
内容取自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
关于java - 纯函数和不纯函数的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22395311/