functional-programming - 函数式编程的副作用

标签 functional-programming side-effects

在一本函数式编程书中,作者提到了以下副作用。

  1. 修改变量
  2. 就地修改数据结构
  3. 在对象上设置字段
  4. 抛出异常或因错误而停止
  5. 打印到控制台或读取用户输入
  6. 读取或写入文件
  7. 在屏幕上绘图

我只是想知道如何在不读取或写入文件的情况下编写纯函数程序(如果它们是副作用)。如果是的话,函数世界中实现这一目标的常用方法是什么?

谢谢, 穆罕默德

最佳答案

正确回答这个问题可能需要整本书(不要太长)。这里的要点是,函数式编程旨在将逻辑描述/表示与其实际运行时解释分开。您的函数代码只是将程序的效果表示(不运行)为值,从而返回某种描述您的计算的抽象语法树。代码的不同部分(通常称为解释器)将采用这些值并延迟运行实际效果。该部分不起作用。

如何才能编写出一个在任何方面都有用的纯函数式程序?这不可能。纯函数式程序只会使 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/

相关文章:

java - Optional<T> 当isPresent() 获取属性时为null 或为null; Java 8 中的函数式风格

java - 空检查与可选的 isPresent 检查

java - C+ +'s accumulate or Groovy' 注入(inject)的 Java 等价物是什么?

Haskell Continuation 传递列表中元素的样式索引

php - 将静态函数分配给PHP中的变量

c - 是 a[i]=y++; a[i++]=y;未定义的行为或未在 C 语言中指定?

r - 如何获得应用功能产生副作用?

c++ - 后递减运算符和逻辑运算符之间的交互

c++ - 是否有关于诸如 erase/remove_if 之类的算法以及 remove_if 实现的可能副作用的编程标准?

go - Go 语言中的副作用