在计算机科学中,函数式编程(FP)一直是编程界的榜样,FP是一种编码风格,主要有以下两个最佳实践:

  1. Immutability
  2. Statelessness

在javascript中,函数式编程有很多种库可供选择,每一种库都有它自己的特长,我们将介绍几种流行的库,并了解这些库以及为什么使用这些库。

Underscore/lodash

Underscore 是一个 JavaScript 工具库,它提供了一整套函数式编程的实用功能,但是没有扩展任何 JavaScript 内置对象。

Lodash库是一个具有一致接口、模块化、高性能等特性的 JavaScript 工具库。

为什么要使用

链式操作

Underscore提供操作链条的方法。可以使用 _.chain() 包裹一个集合(collection),然后调用其它的underscore方法,最后通过调用 _.value() 进行解包获取最后的值。

举个栗子:

1
2
3
4
5
6
const movies = [
  { title: "Mad Max: Fury Road", ratings: [8.9, 9.9, 7.9], year: 2015 },
  { title: "Tomorrowland", ratings: [6.0, 7.0, 8.0], year: 2015 },
  { title: "Jurassic World", ratings: [7.2, 8.2, 9.2], year: 2015 },
  { title: "Inception", ratings: [7.5, 7.5, 8.5], year: 2010 }
];

一些常用方法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// 计算总和
const sum = function(numbers) {
    return _.reduce(numbers, function(sum, n){
        return sum + n }, 0);
};

// 计算平均值
const average = function (numbers) {
    return sum(numbers) / numbers.length;
};

// 是否推荐
const isRecommended = function (movie) {
    return average(movie.ratings) >= 8;
};