几个函数式编程术语

偏应用函数 Partial Application

栗子:

// 创建偏应用函数,偏应用函数将会返回另一个函数。
// 带一个函数参数 和 该函数的部分参数
const partial = (f, ...args) =>
  // 返回一个函数:这个函数的参数在调用函数的时候传入。
  (...moreArgs) =>
    // 使用全部参数调用原始函数
    f(...args, ...moreArgs)

// 原始函数
const add3 = (a, b, c) => a + b + c

// 偏应用 `2` 和 `3` 到 `add3` 给你一个单参数的函数
const fivePlus = partial(add3, 2, 3) // (c) => 2 + 3 + c

fivePlus(4) // 9

Currying

函数柯里化

const sum = (a, b) => a + b
const curriedSum = (a) => (b) => a + b
curriedSum(40)(2) // 42.
const add2 = curriedSum(2) // (b) => 2 + b
add2(10) // 12

将多元函数转化为多次调用一元函数就是函数柯里化。

函数合成 Function Composition

将多个函数合成在一起构成一个新的函数,其中后一个函数的输出将作为前一个函数的输入。

const compose = (f, g) => (a) => f(g(a))
const floorAndToString = compose((val) => val.toString(), Math.floor)
floorAndToString(121.212121) // '121'

纯函数

如果返回值仅由其输入值决定,并且不产生副作用,那么这个函数就是纯函数。

惰性求值 Lazy evaluation

使用了ES6的 Generator 函数。
详见:http://es6.ruanyifeng.com/#docs/generator

const rand = function*() {
  while (1 < 2) {
    yield Math.random()
  }
}
const randIter = rand()
randIter.next() // 每个执行都给出一个随机值,表达式按需求值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值