我阅读了维基百科对幂等性的解释。我知道这意味着一个函数的输出是由它的输入决定的。但我记得我听说过一个非常相似的概念:纯函数。我谷歌他们,但找不到他们的区别......
它们是等价的吗?
我阅读了维基百科对幂等性的解释。我知道这意味着一个函数的输出是由它的输入决定的。但我记得我听说过一个非常相似的概念:纯函数。我谷歌他们,但找不到他们的区别......
它们是等价的吗?
幂等函数可能会导致幂等副作用。
纯函数不能。
例如,设置文本框文本的函数是幂等的(因为多次调用将显示相同的文本),但不是纯函数。
类似地,按 GUID(而不是按计数)删除记录是幂等的,因为在后续调用之后该行仍然被删除。(额外的电话什么也不做)
纯函数是没有副作用的函数,其输出完全由输入决定——也就是说,f(x)
无论调用多少次,调用都会给出相同的结果。
幂等函数是可以多次应用而不改变结果的函数——也就是说,f(f(x))
与f(x)
.
一个函数可以是纯的、幂等的、两者兼有或两者都不是。
不,幂等函数将更改程序/对象/机器状态 - 并且只会进行一次更改(尽管重复调用)。纯函数不会改变任何内容,并且每次调用时都会继续提供(返回)结果。
功能纯度意味着没有副作用。另一方面,幂等性意味着一个函数对于多次调用是不变的。
每个纯函数都是副作用幂等的,因为即使调用不止一次,纯函数也不会产生副作用。但是,返回值幂等性意味着 f(f(x)) = f(x) 不受纯度的影响。
一个很大的混淆来源是,在计算机科学中,命令式编程和函数式编程中的幂等性似乎有不同的定义。
来自维基百科(https://en.wikipedia.org/wiki/Idempotence#Computer_science_meaning)
在计算机科学中,幂等这个术语更广泛地用于描述如果执行一次或多次将产生相同结果的操作。这可能具有不同的含义,具体取决于应用它的上下文。例如,对于带有副作用的方法或子程序调用,这意味着修改后的状态在第一次调用后保持不变。然而,在函数式编程中,幂等函数是对于任何值 x 都具有 f(f(x)) = f(x) 属性的函数。
由于纯函数不会产生副作用,因此我认为幂等性与纯度无关。
我发现了更多定义“幂等”的地方,f(f(x)) = f(x)
但我真的不相信这是准确的。相反,我认为这个定义更准确(但不完全):
描述一个动作,当对同一主题执行多次时,在第一次执行后对其主题没有进一步的影响。投影算子是幂等的。
我解释这一点的方式,如果我们两次申请(主题)f
:x
f(x);f(x);
那么(副作用)效果与
f(x);
因为纯函数不允许副作用,所以纯函数也是微不足道的“幂等”。
更一般(和更准确)的定义idempotent
还包括以下功能
切换(x)
我们可以说切换degree
的 ofidempotency
是 2,因为在应用toggle
每 2 次之后,我们总是以相同的结果结束State