为什么函数式编程好?

Bob*_*Bob 7 functional-programming

我注意到许多函数式编程狂热分子都坚持某些核心概念:

  • 避免国家

  • 避免可变数据

  • 最大限度地减少副作用

  • 等等...

我不只是想知道其他什么东西会使函数式编程,但为什么这些核心思想是好的?为什么避免国家和其他国家好?

Ole*_*ksi 13

简单的答案是,如果您没有额外的状态需要担心,您的代码更容易推理.更简单的代码更易于维护.您不需要担心特定代码(如函数)之外的事情来修改它.这对测试这样的事情有非常有用的影响.如果您的代码不依赖于某些状态,那么为该代码创建自动化测试会变得更加容易,因为您不必担心初始化某些状态.

拥有无状态代码使得创建线程程序变得更加简单,因为您不必担心同时修改/读取共享数据的两个执行线程.您的线程可以运行独立的代码,这可以节省大量的开发时间.

从本质上讲,避免状态会创建更简单的程序.在某种程度上,"移动部件"较少(即代码行可以交互的方式),因此这通常意味着代码更可靠并且包含更少的故障.基本上,代码越简单,就越不会出错.对我来说,这是编写无状态代码的本质.

创建无状态的"功能"代码还有很多其他原因,但对于我来说,它们都归结为简单.


SK-*_*gic 5

除了@Oleksi所说的,还有另一个重要的事情:参考透明度和事务数据结构.当然,您不需要使用函数式编程语言,但使用它们会更容易.

纯函数数据结构保证保持不变 - 如果一个函数返回一个树,它将始终是同一个树,所有进一步的转换将创建它的新副本.以这种方式回溯到任何先前版本的数据结构要容易得多,这对许多基本算法都很重要.


And*_*erg 5

通常,函数式编程意味着:

  • 鼓励使用(一流)功能
  • 劝阻使用(可变)状态

为什么突变是个问题?想想看:突变是数据结构goto控制流量.也就是说,它允许你以一种相当非结构化的方式任意"跳"到完全不同的东西.因此,它偶尔会有用,但大多数时候对可读性,可测试性和组合性都有害.