什么是函数式编程(副作用纯函数引用透明)
Posted zhixiangshu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是函数式编程(副作用纯函数引用透明)相关的知识,希望对你有一定的参考价值。
副作用的概念:一个带有副作用的函数不仅只是简单的返回一个值,还干了一些其他的事情,比如:
-
-
- 修改一个变量
- 直接修改数据结构
- 设置一个对象的成员
- 抛出一个异常或以一个错误终止
- 打印到终端或读取用户的输入
- 读取或写入一个文件
- 在屏幕上绘画
-
因此我们对于函数式程序的判定边界就在于:函数的副作用。
于是——当函数没有副作用,那么我们就说这个函数符合函数式编程(FP);再给出纯函数这个概念用来定义一个函数没有副作用,我们可以说纯函数构成的程序风格就是函数式的!
buyCoffee的例子(p3):函数只不过是需要返回一杯咖啡,可是却对费用进行了持久化操作(产生副作用),我们可以在buyCoffee方法返回咖啡时也把费用作为值一并返回,将费用这条记录交给其他程序来做持久化,以此来去除副作用 ====》通过把这些副作用推到程序的外层,来转换任何带有副作用的函数(纯的内核和一层很薄的外围来处理副作用)
引用透明:对于程序p,如果它包含的表达式e满足引用透明,所有e都可以替换为它的运算结果而不会改变程序p的含义(要求函数不论进行任何操作都可以用它的返回值来代替)。
引用透明与纯函数的关联:假如存在一个函数f,若表达式f(x)对所有引用透明的表达式x也是引用透明,那么这个f是一个纯函数(也就是说,传入引用透明的x表达式给f,函数f(x)的返回值可以代替这个函数在其他程序起的作用)
纯函数的好处:纯函数是模块化的、可组合的,因为它从“对结果做什么(返回值)”和“如果获取输入(通过参数传递获得输入)”中分离了计算本身的逻辑,就像一个黑盒子。
以上是关于什么是函数式编程(副作用纯函数引用透明)的主要内容,如果未能解决你的问题,请参考以下文章