副作用 - 这是什么?

时间:2009-07-02 11:44:24

标签: java jsp

有人可以在下一行告诉我“副作用”的含义吗?

  

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

5 个答案:

答案 0 :(得分:41)

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

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

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

答案 1 :(得分:13)

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

有关详细信息,请参阅pure functions上的维基百科条目。

答案 2 :(得分:3)

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

public class SideEffectClass{

    private int state = 0;


    public doSomething(int arg0){
        state += arg0;
    }
}

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

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

答案 3 :(得分:1)

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

public class SideEffectClass{

    private int state = 0;

    public doSomething(...){//Does not matter
        state ++;
    }
}

答案 4 :(得分:0)

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

相关问题