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

标签 functional-programming side-effects

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

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

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

    谢谢,
    穆罕默德

    最佳答案

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

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

    相关文章:

    language-agnostic - 一个方法究竟什么时候有副作用?

    list - Haskell:扫描列表并为每个元素应用不同的函数

    algorithm - 用功能语言了解此多项式除法算法

    clojure - 在 Clojure 中处理数据库读取

    haskell - 函数式编程: Where does the side effect actually happen?

    python - 了解模拟和副作用

    intellij-idea - 为什么我可以使用 lambda 表达式的名称,但不能使用函数的名称?

    Haskell:如何使用 haskeline 并在同一程序中写入文件

    javascript - 有没有更好的方法在 JavaScript 中对数组项进行部分求和?

    php - PSR-1 2.3 副作用规则