纯净和不纯的功能之间的区别?

Ami*_* KK 15 java accessor

我假设纯函数必须始终具有返回类型(即,必须不是void)并且必须具有相同的输出,而不管对象的状态和Impure函数是否改变对象的状态或打印对象的状态.

但我使用的教科书指出:

访问器通常包含return语句,但是打印有关对象状态的信息的方法也可以被分类为访问者.

我糊涂了.哪一个是正确的?

编辑

一点澄清,让我问的是这个问题:

最后一个问题是" 给出所使用的功能类型 ",那里评论的人说这是一个不纯的功能,因为它是打印.

那么这个功能是纯粹的还是不纯的?

A.T*_*.T. 31

内容取自此链接

纯功能的特点:

  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
Run Code Online (Sandbox Code Playgroud)


Ell*_*sch 8

维基百科 - 如果这两个关于函数的语句都成立,则函数可以被描述为纯函数:

  1. 在给定相同参数值的情况下,该函数始终评估相同的结果值.函数结果值不能依赖于程序执行过程中或程序的不同执行之间可能发生变化的任何隐藏信息或状态,也不依赖于来自I/O设备的任何外部输入.
  2. 对结果的评估不会导致任何语义上可观察到的副作用或输出,例如可变对象的突变或输出到I/O设备.

因此,如果与您的代码相比,任何一个语句都是false,那么它就是不纯的.

  • 我个人认为打印诊断或跟踪输出在语义上是不可观察的,这就是为什么我犹豫不决地打印任何关于打印任何内容的声明. (2认同)