函数式编程的定义,我不好理解。如果说他类似 Unix 的 pipe,就很好理解,就是把函数的结果作为下一个函数的参数或调用主体,串起来。
我觉得 Pipe 是 Unix 设计理念中很赞的一点,比如以下命令将一个文件中的单词按字母顺序排序并统计词频。
cat file.txt | tr -s ' ' '\n' | sort | uniq -c | sort -nr
数据流沿着管道 |
往后经过一次次的处理,最终形成我们要的数据。
JavaScript 也慢慢的对函数式编程有了很多支持。
比如ES6 中有了扩展运算符… ,我们就可以一行代码求最小值。
const min = Math.min(...arr) // 寻找数组arr 的最小值
如果不能用扩展运算符呢
const min = arr.reduce((prev,cur) => Math.min(prev,cur))
这也是函数式编程,reduce 是 ES6 中数组的新方法。
以前我们要 for (let i = 0; i < arr.length; i++) { }
现在我们直接用 arr.forEach arr.map() arr.filter() arr.some() arr.every()
,更美观。
const result = numbers
.map(square)
.filter(isEven) // map 函数返回的结果(数据流)作为 filter 的调用主体。