函数式编程

函数式编程的定义,我不好理解。如果说他类似 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 的调用主体。