【发布时间】:2018-04-12 14:35:54
【问题描述】:
下面是纯函数吗?
function test(min,max) {
return Math.random() * (max - min) + min;
}
我的理解是纯函数遵循以下条件:
- 它返回一个根据参数计算的值
- 除了计算返回值,它不做任何工作
如果这个定义是正确的,我的函数是纯函数吗?还是我对纯函数定义的理解不正确?
【问题讨论】:
-
"它除了计算返回值之外不做任何工作" 但是它调用
Math.random()改变了RNG的状态。 -
第二点更像是“它不会改变外部(函数)状态”;正如人们在下面所写的那样,第一个应该补充一点,就像“它返回从 SAME 参数计算的 SAME 值”
-
是否存在允许随机性的半纯函数的概念?例如。
test(a,b)总是返回同一个对象Random(a,b)(可以代表不同的具体数字)?如果你保持Random符号化,它在经典意义上是纯粹的,如果你早期评估它并输入数字,也许作为一种优化,函数仍然保留一些“纯粹性”。 -
“任何考虑产生随机数字的算术方法的人,当然都处于犯罪状态。” ——约翰·冯·诺依曼
-
@jdm 如果您遵循“半纯”的主题,您认为函数纯模有一些定义明确的副作用,您最终可能会发明单子。欢迎来到黑暗面。 >:)
标签: javascript function pure-function