【发布时间】:2018-05-28 14:37:44
【问题描述】:
我知道纯函数属于“函数式编程”范式,您创建一个没有任何副作用的函数,并且对于输入它总是返回相同的输出,例如:
function (a,b) {
return a + b;
}
这是一个纯函数,因为对于输入,我总是返回相同的输出,并且没有产生任何副作用。好的,我明白了。
但是我如何才能制作“纯函数”,当我真正想要创建副作用时,我如何才能停留在“函数式编程”范式中,例如更改 DOM 中的文本内容,例如:
function changeContent () {
let content = document.querySelector("#content");
content.textContent = 'Hello World';
}
这个函数有一个副作用,它不是获取输入而不是返回输出,而是产生副作用,但这实际上是函数的重点。这仍然是“函数式编程”吗?在那种情况下如何保持“函数式编程”范式?
【问题讨论】:
-
在 100% 纯严格的函数式编程中,例如Haskell,副作用被表示为特殊类型并引入了所有新的范例。这根本不能很好地转化为 Javascript。 Javascript 是一种多范式 语言,它不是 100% 纯函数式编程......
-
@deceze 你不必纯粹为了使用代数数据类型或仿函数等。一切都与 Javascript 中的策略有关。
-
这个 q 太宽泛了。这是一个广泛的答案:用类型编码你的副作用并定义,对于这种行为,这种类型等同于其他类型。此外,您还需要一些特定的组合器,仅此而已。
-
Ch 8 - Tupperware of Mostly Adequate Guide to Functional Programming 谈到了这个
标签: javascript functional-programming