函数链
1 | _.chain(names).filter(isValid).map(s => s.replace(/_/, ' ')).uniq().map(_.startCase).sort().values() |
管道函數
函数式编程将管道视为构建程序的唯一方法。所选函数的输入和输出需要满足以下两个兼容条件:
- 类型——函数的返回类型必须与接受函数的参数类型相匹配
- 元数——接收函数必须声明至少一个参数才能处理上一个函数的返回值
1
2
3
4const trim = (str) => str.trim()
const normalize = (str) => str.replace(/\_/g, '')
normalize(trim('111-11-111'))
应对纯的代码和不纯的代码
不纯的代码在运行后会导致外部可见的副作用,导致访问的数据超出函数的作用域,导致外部依赖关系。只要有一个函数是不纯的,整个程序都会受影响。
但是,并不需要总是保证100%的纯函数以获得函数式编程的好处。理想情况下,开发者需要尽可能地分离纯的行为与不纯的行为,而且最好是在同一个函数中。