副作用 - 这是什么?

22 java jsp

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

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

Mic*_*rdt 45

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

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

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

  • +1良好的副作用描述.但是 - 这不是Java使用"方法"这个词的原因.这不是好的PR,而是"方法"是OO中的术语,远在Java之前. (7认同)
  • 我怀疑作为OO术语的"方法"是精确创造的,因为OO的本质是用改变数据的函数封装数据,因此不是真正的函数. (7认同)

unw*_*ind 14

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

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