Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 副作用——什么';这是什么?_Java_Jsp - Fatal编程技术网

Java 副作用——什么';这是什么?

Java 副作用——什么';这是什么?,java,jsp,Java,Jsp,有人能告诉我下面这句话中“副作用”的含义吗 如果您调用的EL函数不返回任何内容,那么您调用它只是因为它的副作用 这意味着您没有调用数学意义上的“真”函数。这样的函数总是返回一个值,该值完全由其输入参数决定。没有要修改的“状态”,其他任何事情都不会发生。这就是为什么函数式编程从并行化的角度来看是有趣的;这样可以更容易地证明,例如,两个函数调用是独立的,并且可以并行运行 有关更多详细信息,请参见上的Wikipedia条目。除了计算和返回值之外,方法还可以做任何事情。实例或类字段值的任何更改都是一种副

有人能告诉我下面这句话中“副作用”的含义吗

如果您调用的EL函数不返回任何内容,那么您调用它只是因为它的副作用


这意味着您没有调用数学意义上的“真”函数。这样的函数总是返回一个值,该值完全由其输入参数决定。没有要修改的“状态”,其他任何事情都不会发生。这就是为什么函数式编程从并行化的角度来看是有趣的;这样可以更容易地证明,例如,两个函数调用是独立的,并且可以并行运行


有关更多详细信息,请参见上的Wikipedia条目。

除了计算和返回值之外,方法还可以做任何事情。实例或类字段值的任何更改都是一种副作用,就像在屏幕上绘制某些东西、写入文件或网络连接一样

严格地说,“函数”被定义为没有副作用——这就是为什么Java使用“方法”这个词。没有返回值的实函数是没有意义的


显然,一个没有返回值的方法肯定会有某种副作用来证明它的存在。Set方法就是一个例子——副作用是改变对象的内部状态。

副作用是方法调用改变类的状态。所以

public class SideEffectClass{

    private int state = 0;


    public doSomething(int arg0){
        state += arg0;
    }
}
在这里,doSomething(int arg0)具有更改状态变量的副作用


当你想到一个程序时,你可以把它看作是指令+状态+输入。因此,如果一个程序的域是所有可能的输入*状态的范围,并且该程序有副作用,那么随着副作用数量的增加,您可以看到应用程序可能结果的共同域会爆炸性地增长。这使得程序的可能状态变大,从而导致复杂的测试。函数式编程范式旨在消除副作用。通过使函数成为第一类公民,并使所有声明都不可变,函数编程可以防止副作用,从而使函数编程在并行处理中大放异彩,因为同步问题减少了。

让我们稍微操纵一下上面给出的代码,以便在比较中弄清楚

public class SideEffectClass{

    private int state = 0;

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

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

+1副作用的良好描述。但是,这不是Java使用“方法”这个词的原因。这不是为了好的公关,而是“方法”是OO中的术语,早在Java出现之前,我怀疑“方法”正如一个OO术语被创造出来,正是因为OO的本质是用改变数据的函数封装数据,因此不是真正的函数。副作用可能是改变类状态以外的事情,如上所述。“这样的函数总是返回一个值,这完全取决于它的输入参数。”这就是总结。关于函数式编程的观点也很重要。我会调查的。