2016-07-12 31 views
3

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

  1. 修改可变
  2. 修改数据结构代替
  3. 对象
  4. 抛出异常或错误
  5. 打印到控制台或读取用户输入
  6. 停止在设定的场
  7. 读取或写入到文件
  8. 在屏幕上绘图

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

感谢, 穆罕默德

+2

我认为这是不可能的。 我们总是编程的副作用和目标是不完全避免它们,因为如果你没有任何你的程序根本不会做任何事情:) 目标是写尽可能多的纯代码,你可以和分开尽可能从不纯的地方开始。 – cstuncsik

+3

[功能语言如何模拟副作用?]可能的副本(http://stackoverflow.com/questions/3850368/how-do-functional-languages-model-side-effects) – sepp2k

+0

要继续@ cstuncsik的思想,我们部分做到这一点,以便分离出的不纯代码是我们不愿意测试的部分 - 它不是“我们正在编写的内容”。如果我们将所有剩下的东西(我们正在写的“什么”)做成纯粹的,那么它就是可预测/可测试的,并且不纯的表面会被最小化。 – jinglesthula

回答

0

为了简洁起见,让我(在)简化和长话短说:对付纯粹的函数编程“副作用”,你(程序员)写纯函数从输入到输出,系统通过将这些纯粹的函数应用于“现实世界”来产生副作用。例如,要读取一个整数x并编写x+1,您(粗略地说)编写一个函数f(x) = x+1,系统将其应用于实际输入并输出其返回值。再举一个例子,你的纯函数不会引发异常作为副作用,而是返回一个代表异常的特殊值。 Haskell中的各种“单子”(例如IO)推广了这些想法,即通过纯函数代表副作用(当然,实际的实现比较复杂)。