一、函数式编程特性
函数式编程的两点基本主张
1、函数是第一等公民
2、纯函数
这两点是函数式编程的基础,他带来了更高层次的模块化代码手段,是单元测试工程师的梦想天堂。
在以上基本主张之上,函数式编程带来了诸多酷炫的技术:
利用 Memorization 提升性能
利用 惰性求值 写出更好的模块化代码
使用 curry 配合 函数组合
函数是 第一等公民 就不赘述了,那么我们来看看什么是纯函数?
二、纯函数
除了将函数视作 “一等公民”,函数式编程语言还主张甚至强制将函数写成纯函数 (pure function)。
纯函数是指同时满足下面两个条件的函数:
函数的结果只依赖于输入的参数且与外部系统状态无关——只要输入相同,返回值总是不变的。
除了返回值外,不修改程序的外部状态(比如全局变量、入参)。——满足这个条件也被称作“没有函数副作用 (side effect)”
由纯函数的两点条件可以看出,纯函数是相对独立的程序构件。因为函数的结果只依赖于输入的参数且与外部系统状态无关,使得单元测试和 debug 变得异常容易,而这也正是模块化的优点之一。
比如,若应用了函数式编程,我们不必担心 doSomething 后 data 会改变。
更多函数式编程知识及Java面试技巧访问 shimo.im/docs/TMW7MLYbqiQBwvM8
三、引用透明
当人们讨论函数式编程的时候,常常会提到一个词——引用透明(Referential transparency)。其实引用透明的概念与纯函数很接近:
如果一个表达式,对于相同的输入,总是有相同的结果并且不修改程序其他部分的状态,那么这个表达式是引用透明的。
由前面纯函数的定义可以看到,由于函数调用也是表达式的一种,因此任何纯函数的调用都满足引用透明