纯函数(Pure Functions):函数的输出仅依赖于其输入参数,不依赖外部状态,也不会修改外部状态。这使得纯函数易于测试和调试。
// 纯函数示例
function add(a, b) {
return a + b;
}
不可变性(Immutability):数据一旦创建就不能被修改,任何修改数据的操作都会返回一个新的数据。避免了共享状态和副作用。
// 不可变性示例
const arr = [1, 2, 3];
const newArr = [...arr, 4]; // 返回一个新数组,不修改原数组
高阶函数(Higher-Order Functions):函数可以作为参数传递给另一个函数,或作为另一个函数的返回值。
// 高阶函数示例
function map(arr, fn) {
const result = [];
for (let i = 0; i < arr.length; i++) {
result.push(fn(arr[i]));
}
return result;
}
const doubled = map([1, 2, 3], x => x * 2); // [2, 4, 6]
函数组合(Function Composition):通过将多个小函数组合成一个新的函数,完成更复杂的计算。
// 函数组合示例
const compose = (f, g) => x => f(g(x));
const add1 = x => x + 1;
const multiply2 = x => x * 2;
const add1ThenMultiply2 = compose(multiply2, add1);
console.log(add1ThenMultiply2(5)); // 12
函数式编程的思想在现代编程语言和库中得到了广泛应用,例如:
map
、filter
、reduce
等函数以及第三方库如 toolz
。// 使用 map、filter 和 reduce 进行函数式编程
const numbers = [1, 2, 3, 4, 5];
// map 示例
const doubled = numbers.map(x => x * 2); // [2, 4, 6, 8, 10]
// filter 示例
const even = numbers.filter(x => x % 2 === 0); // [2, 4]
// reduce 示例
const sum = numbers.reduce((acc, x) => acc + x, 0); // 15
console.log(doubled, even, sum);
函数式编程是一种强大的编程范式,注重纯函数、不可变性和高阶函数的应用。它可以提高代码的可读性和可维护性,特别适用于并发编程和需要高度模块化的项目。虽然有一定的学习曲线和性能开销,但其带来的优势使其在现代软件开发中越来越受欢迎。