
如今,函数式编程在开发者中是一个热门话题,这并非没有原因。WPML 4.5 版本是一个大型项目,引入了自动翻译网站的选项。对我们来说,这也是改用函数式编程的适当时机。以下是我们在该过程中学到的经验。
什么是函数式编程?
您可能听说过,函数式编程使代码更具可读性并且更易于测试。但要完全掌握函数式编程,了解其相关概念非常重要。
首先,函数式编程是一种编程范式,其重点是使用函数来构建软件,并将函数组合在一起以构建更复杂的函数。函数式编程使代码在本质上更具声明性。您表达的是您想要的结果,而不是编写一系列更新程序状态的语句。
请务必注意它所使用的函数——特别是纯函数。纯函数接收数据并返回数据,但没有任何其他副作用。这使得这些函数非常容易测试,因为如果提供相同的参数,就会得到相同的结果。
简而言之,在函数式编程中,输出取决于输入。
为什么选择函数式编程?
WPML 是一个庞大且复杂的项目。直到最近,我们一直使用面向对象编程(OOP)来尝试管理这种复杂性。其中一个主要挑战是为我们所有的项目编写测试代码(单元测试)。在编写可测试代码时,我们需要确保所做的任何更改都不会破坏现有代码。
对 OOP 代码进行单元测试的作用是有限的。需要模拟代码依赖关系,以便可以独立测试类。结果,测试最终变得庞大且复杂。
据说函数式编程的主要重点是“解决什么”。相比之下,面向对象编程采用的是“如何解决”的方法。考虑到这一点,函数式编程似乎可以帮助我们克服一些挑战。
我们做了什么
当谈到函数式编程时,PHP 并不是首先想到的语言——尽管它确实允许我们引入函数式风格。例如,允许扩展 WordPress 的钩子和过滤器使用函数来覆盖 WordPress 的功能。
遗憾的是,PHP 中没有用于使用更偏向函数式范式的标准库。我们审查了许多库,但没有一个完全符合我们以函数式风格编写富有表现力代码的需求。因此,我们决定编写自己的库。我们从不同的来源汲取了灵感,但很多来自 Javascript 库,我们发现这些库更加成熟。
函数式编程的方法与其他范式不同,因此切换到函数式编程范式实际上是一大步。它要求您改变编写代码和解决问题的思维方式。编写清晰简洁且富有表现力的代码需要大量的练习。
效果如何?
我们绝对认为它是有效的。函数式编程具有许多对我们有利的特性:
- 代码结构更好
- 代码更具表现力且更简洁
- 减少了代码重复
- 函数更小,因此更易于测试和重用
- 函数可以组合在一起
- 测试中的模拟更少
- 开发了可重用的模拟库
当然,没有什么是完美的。虽然函数式编程更简洁且更具可预测性,但它确实也有缺点,特别是如果您对它不熟悉的话:
- 更难调试
- 更难更改——尽管这也可以看作是一个优势,因为它要求您深思熟虑后再进行更改,而不是引入快速更改
- 学习曲线陡峭
不要害怕尝试
不言而喻,函数式编程的流行不仅仅是一种趋势。由于其本质,函数式编程非常适合机器学习和数据分析等任务。因此,各种规模的公司都开始对函数式编程表现出兴趣,甚至开始向其过渡。这并不意味着您应该永远告别面向对象编程,但函数式编程值得一试。即使您最终从未使用过它,您作为开发者的水平也有可能会得到提升。
如果您有兴趣了解更多信息,我们建议从 Composing Software 博客文章系列开始。
一旦您准备好深入了解,请查看我们的 FP 项目仓库。
您对代码充满热情吗?加入我们。
我们一直在寻找优秀的开发者加入我们的团队。如果您就是这样的人,请不要再犹豫——立即申请。

