副作用 – 这是什么?

有人能告诉我下面一行中“副作用”的含义吗?

如果你正在调用一个不返回任何东西的EL函数,那么你只是因为它的副作用而调用它。

副作用是除了计算和返回值之外的任何方法。 实例或类字段值的任何更改都是副作用,就像在屏幕上绘制内容,写入文件或网络连接一样。

严格来说,“函数”被定义为没有副作用 – 这就是Java使用“方法”一词的原因。 没有返回值的真正函数将毫无意义。

显然,没有返回值的方法必须具有某种副作用,certificate其存在是正确的。 设置方法就是一个例子 – 副作用是改变对象的内部状态。

这意味着你在数学意义上并没有称之为“真正的”function。 这样的函数总是返回一个值,该值完全由其输入参数决定。 没有“状态”可以修改,也没有其他任何事情可以发生。 这就是从并行化的角度来看函数式编程很有趣的原因; 它使得更容易certificate例如两个函数调用是独立的并且可以并行运行。

有关更多详细信息,请参阅有关纯函数的Wikipedia条目。

副作用是当方法调用更改类的状态时。 所以

public class SideEffectClass{ private int state = 0; public doSomething(int arg0){ state += arg0; } } 

这里,doSomething(int arg0)具有更改状态变量的副作用。

当您想到一个程序时,您可以将其视为指令+状态+输入。 因此,如果程序的域是所有可能的输入*状态的范围,并且程序具有副作用,则可以看到应用程序的可能结果的codomain可以爆炸式增长,因为副作用的数量增加。 这使得程序的可能状态变大,这导致复杂的测试。 function编程范例旨在消除副作用。 通过使函数成为一等公民,并通过使所有声明不可变函数编程防止副作用,这使得函数编程在并行处理中发挥作用,因为同步问题减少了。

让我们稍微操纵一下给定的代码,以便比较清楚。

 public class SideEffectClass{ private int state = 0; public doSomething(...){//Does not matter state ++; } } 

当你使用药物时,它的副作用是那些通常是不良的不良反应。 使用它的主要目的是获得它的“需求”效果。 在这里,当我们查看函数的角度时,通常在调用它们时,您将获得一个计算值并使用。 还有其他function,它们在计算“需求”值时也会更改某些值,因此此处“更改某些值”是副作用。 在你的句子的描述中,如果一个函数没有返回任何东西,它只用于它的副作用,所以在这里,副作用是“改变一些值”。