在一本函数式编程书中,作者提到了以下副作用。
- 修改变量
- 就地修改数据结构
- 在对象上设置字段
- 抛出异常或因错误而停止
- 打印到控制台或读取用户输入
- 读取或写入文件
- 在屏幕上绘图
我只是想知道如何在不读取或写入文件的情况下编写纯函数程序(如果它们是副作用)。如果是的话,函数世界中实现这一目标的常用方法是什么?
谢谢, 穆罕默德
最佳答案
正确回答这个问题可能需要整本书(不要太长)。这里的要点是,函数式编程旨在将逻辑描述/表示与其实际运行时解释分开。您的函数代码只是将程序的效果表示(不运行)为值,从而返回某种描述您的计算的抽象语法树。代码的不同部分(通常称为解释器)将采用这些值并延迟运行实际效果。该部分不起作用。
如何才能编写出一个在任何方面都有用的纯函数式程序?这不可能。纯函数式程序只会使 CPU 升温。它需要一个实际写入磁盘或网络的不纯部分(解释器)。 There are several important advantages in doing it that way 。纯函数部分很容易测试(测试纯函数很容易),referentially transparent纯函数的本质使得 reason about your code locally 变得容易,使得整个开发过程的错误更少,生产力更高。它还提供elegant ways to deal with traditionally obfuscated defensive code .
那么函数世界中实现副作用的常用方法是什么?如前所述,使用值表示它们,然后编写解释这些值的代码。可以找到整个过程的非常好的解释 in these blog post series .
关于functional-programming - 函数式编程的副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55651108/