偏函数与柯里化:函数式编程技巧
如果你写过一段时间的代码,尤其是接触过函数式编程(Functional Programming),那么你一定听说过「柯里化」(Currying)和「偏函数」(Partial Application)这两个术语。它们听起来像是数学课本里的概念,但实际上,它们是日常开发中非常实用的技巧,能够让你的代码更灵活、更可复用、更易组合。
很多人容易把柯里化和偏函数混为一谈,因为它们都涉及到「固定函数的部分参数」。但它们的核心思想和使用场景其实有着明确的区别。本文将带你从零开始,深入理解这两个概念,并通过大量实战案例,帮你彻底掌握它们。
我们会用 JavaScript 和 Python 两种语言来演示,因为它们在函数式编程方面都有着广泛的应用。文章会先介绍基础概念,然后通过对比加深理解,最后结合高阶用法展示它们在实际项目中的威力。
一、从函数调用谈起:参数传递的两种哲学
在传统的命令式编程中,我们定义一个函数,然后一次性传入所有参数,调用它,得到结果。比如add(2, 3),直接返回 5。这很直观,也没什么不好。
但函数式编程提倡另一种思考方式:函数可以「分步」接收参数。也就是说,你可以先传入一部分参数,得到一个「新函数」,这个新函数接受剩余的参数,最终完成计算。这种「分步传参」的思想,正是柯里化和偏函数的根基。
为什么需要分步传参?主要有以下几个原因:
- 参数复用:有些参数在多个调用中保持不变,固定它们可以避免重复传递。
- 函数组合:分步传参使得函数更容易被组合成管道(pipeline),实现复杂逻辑的拼
