【发布时间】:2019-07-26 07:12:28
【问题描述】:
定义函数为pure的两个条件如下:
- 没有副作用(即只允许更改本地范围)
- 在给定相同输入的情况下始终返回相同的输出
如果第一个条件始终为真,是否有任何时候第二个条件不为真?
即真的只有第一个条件才有必要吗?
【问题讨论】:
-
您的场所不明确。 “输入”太宽泛了。可以认为函数有两种输入。他们的论点和“环境”/“上下文”。如果您不区分这两种输入,则可以认为返回系统时间的函数是纯函数(即使它不是 obv)。
-
@Alexander:在“纯函数”的上下文中,“输入”通常被理解为显式传递的参数/参数(通过编程语言使用的任何机制)。这是“纯功能”定义的一部分。但你是对的,记住定义很重要。
-
简单反例:返回一个全局变量的值。没有副作用(仅读取全局变量!),但每次仍然可能产生不同的结果。 (如果您不喜欢全局变量,请返回一个局部变量的地址,该变量取决于运行时的调用堆栈)。
-
你需要扩展你对“副作用”的定义;您说纯方法不会产生副作用,但您还需要注意纯方法不会消耗其他地方产生的副作用。
-
@sleske 也许大家都能理解,但缺乏这种区别才是 OP 混乱的确切原因。
标签: javascript functional-programming language-lawyer pure-function