一、什么是函数式编程
函数式编程属于”结构化编程”的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。
函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。
二、特性
闭包和高阶函数、
惰性计算
递归
三、特点
①函数是”第一等公民”
指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值
②只用”表达式”,不用”语句”
③没有”副作用”
指的是函数内部与外部互动(最典型的情况,就是修改全局变量的值),产生运算以外的其他结果。因为 FP 语言不包含任何赋值语句,变量值一旦被指派就永远不会改变。
④不修改状态
函数式编程只是返回新的值,不修改系统变量。因此,不修改变量,也是它的一个重要特点
⑤引用透明性
即如果提供同样的输入,那么函数总是返回同样的结果。就是说,表达式的值不依赖于可以改变值的全局状态。
四、优点与缺点
1.优点
代码简洁,开发快速;
接近自然语言,易于理解;
方便的代码管理(有利于进行单元测试(unit testing)和除错(debugging),以及模块化组合)
易于”并发编程”
代码的热升级
2.缺点
函数式编程常被认为严重耗费在CPU和存储器资源。
例如: 由于所有的数据都是不可变的,所以所有的变量在程序运行期间都是一直存在的,非常占用运行资源。同时由于函数式的先天性设计导致性能一直不够。虽然现代的函数式编程语言使用了很多技巧比如惰性计算等来优化运行速度,但是始终无法与面向对象的程序相比,当然面向对象程序的速度也不够快