java - 纯函数和不纯函数的区别?

标签 java accessor

我假设纯函数必须总是有一个返回类型(即,不能是 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

纯函数的特点:

  1. 纯函数的返回值完全取决于它的参数 因此,如果您使用相同的参数集调用纯函数,您将始终获得相同的返回值。

  2. 它们没有网络或数据库调用等任何副作用

  3. 他们不修改传递给他们的参数

不纯函数的特征

  1. 非纯函数的返回值不仅仅取决于它的参数 因此,如果您使用相同的参数集调用非纯函数,您可能会得到不同的返回值 例如Math.random()、Date.now()

  2. 它们可能有任何副作用,例如网络或数据库调用

  3. 他们可以修改传递给他们的参数

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/

相关文章:

java - 在 Android ContentProvider 中从网络同步时防止网络同步循环

c# - 使用访问器公开类属性

angularjs - 在 AngularJS Factory 中使用 Getter/Setter 方法

c++ - 使用 C++ 的代码块 我正在尝试从我的类中打印出访问器函数。错误指出请求成员 get_address

java - Mockito 能否根据方法调用时的值来验证参数?

java - 如何正确停止 "drawing"线程

javascript - for-in 循环 VS in-operator

c# - 为什么不允许只有一个带有主体的访问器而不是两个?

java - JQuery 更新 <c :forEach> in Spring MVC

java - 两行字母互换,Adobe Reader 可以完成这项工作