函数式编程名词众多,可能有些我们在日常的编码中实践过,但并不知道他的学名,也有可能很多我们从来没有听说过,下面是一些常见的函数式编程中的名词说明
- 纯函数 Purity
- 函数柯里化 Currying
- 偏函数 Partial Application
- 惰性函数 Lazy evaluation
- 函数组合 Function Composition
- 高阶函数 Higher-Order Functions
- 函数记忆 Memoize
- 函数副作用 Side effects
纯函数 Purity
与外界交换数据只有唯一渠道——参数和返回值,并且函数的执行不会对外部环境产生副作用
var arr = [1,2,3,4,5]; |
函数副作用 Side effects
如果函数或表达式与其自身作用域之外的可变数据发生了读写操作,那么此时函数和表达式就产生了副作用
let greeting; |
偏函数 Partial Application
原函数的基础上预填充部分参数并返回的新函数
// 下面是一个创建偏函数的辅助函数 |
惰性求值 Lazy evaluation
惰性求值,是一种按需执行的求值策略,只有需要某个值时才会执行相关的表达式。在函数式编程语言中,这一特性可用于构造无限列表。
const rand = function*() { |
函数柯里化 Currying
将一个接收多个参数的函数转化为单参数函数的方式
将接收多个参数的函数转换为一系列只接收一个参数的函数的过程
//比较容易读懂的ES5写法 |
函数组合 Function Composition
接收多个函数作为参数并返回一个新函数的方式
const add = function ( x, y ) { |
高阶函数 Higher-Order Functions
函数接收一个或多个函数做为参数,并返回一个函数
const numbers = [1, 2, 3]; |
函数记忆 Memoize
得益于纯函数的特性,相同的参数可能返回相同的结果,那么就可以缓存参数对对应的结果,以减少反复的计算,从而提高性能
|
var memoize = function(func, hasher) { |
pointfree style
point-free style
是一种不显式向函数传递参数的代码风格,通常需要柯里化和高阶函数来实现
// 需求:输入 'kevin',返回 'HELLO, KEVIN'。 |