你知道什么是纯函数吗?

104 阅读2分钟

"# 什么是纯函数?

纯函数是指在相同的输入下,总是返回相同输出的函数。它们不依赖于外部状态或副作用,也不会修改外部状态。纯函数的特性使得它们在编程中具有许多优势,如可预测性、可测试性和更好的模块化。

纯函数的特性

  1. 确定性:对于相同的输入,纯函数总是返回相同的输出。例如:

    function add(a, b) {
        return a + b;
    }
    console.log(add(2, 3)); // 输出 5
    console.log(add(2, 3)); // 输出 5
    
  2. 无副作用:纯函数不会改变外部状态或与外部环境交互。它们仅依赖于输入参数。例如:

    let count = 0;
    function increment() {
        count += 1; // 这是有副作用的
        return count;
    }
    
  3. 可组合性:由于纯函数的可预测性,它们可以轻松地组合在一起使用。例如:

    function multiply(a, b) {
        return a * b;
    }
    function square(x) {
        return multiply(x, x);
    }
    console.log(square(4)); // 输出 16
    

纯函数的优势

  • 可测试性:纯函数不需要额外的上下文来进行测试,极大地简化了单元测试的过程。
  • 可重用性:由于纯函数不依赖于外部状态,可以轻松地在不同的场合下复用。
  • 并行性:纯函数可以独立于其他函数并行执行,因为它们不共享状态,避免了竞争条件。

纯函数的示例

以下是一个简单的纯函数示例,计算数组的平方和:

function squareSum(arr) {
    return arr.reduce((sum, num) => sum + num * num, 0);
}
console.log(squareSum([1, 2, 3])); // 输出 14

相对的,下面是一个不纯的函数,它依赖于外部变量:

let total = 0;
function addToTotal(num) {
    total += num;
    return total;
}
console.log(addToTotal(5)); // 输出 5
console.log(addToTotal(10)); // 输出 15

结论

纯函数是编程中一个重要的概念,它们提供了更好的可预测性、可测试性和可重用性。使用纯函数可以使代码更加清晰、简洁,并减少潜在的错误。理解并应用纯函数有助于提升编程技能,尤其是在函数式编程和现代JavaScript开发中。"