现在,你该考虑函数式编程了么?

| 2022-03-25

循环是处理集合(collection)的标准方法,比如数组 Array 和列表 List。然而,有些循环重复实现了查相同的模式,导致了代码重复。Higher-order functions有些使用其他函数作为输入或输出的函数,可以通过提供一种更简单的方式来表示集合的常见操作,从而减少重复。

考虑JavaScript中的这两个循环,以判断数组中的每一个对象是否满足某个条件:

两个高度相似的循环,破坏了 DRY原则,Don’t Repeat Yourself 给代码的读者和维护者创建了不必要的负担。

为了减少维护成本,使用 every 方法用单一表达式来代替每个循环。 (在其它语言中, every 可能有其它名字,例如 all 或者 allMatch).

使用高阶函数处理集合有以下几个收益:

  • 它通过抽象出常见的循环代码,显著减少了重复。
  • 修改后的代码更短、更简单,出现 Bug 的机会更少。
  • 读代码的人能很快看出代码的意图,因为它不会隐藏在低级控制流后面。

另外两个高阶函数是 map (将函数应用于集合的每个元素)和 filter (通过一个谓词来选择集合中的一些元素)。确切的语法在不同语言中会有所不同,这里的 JavaScript 中的用法(使用一个匿名函数作为参数):

别做得太过分了! 如果使用函数式会使循环变得更难理解,或者在你所用的语言中被认为是不符合惯例的,就不要用函数式重写这个循环。 (例如,在 Python 中,list 可以被理解为等同于 mapfilter,但是但通常是首选)。


原文作者: Cathal Weakliam

原文链接:Code Health: Now You’re Thinking With Functions?

发表时间: February 07, 2022