vlambda博客
学习文章列表

用函数式,编写易维护的代码

循环是处理集合(collection)的标准方法,比如数组 Array 和列表 List。然而,有些循环重复性地实现了相同的模式,导致了重复性代码。

有时,可以使用高阶函数来解决这类问题。

高阶函数(Higher-order functions)是指那些使用其他函数作为输入或输出参数的函数。

它可以用一种更简单的方式来表示对集合的常见操作,从而减少重复。

考虑JavaScript中的下面这两个循环,它们都是用来判断数组中的每一个对象是否满足某个条件:


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

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


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

  • 它通过抽象出常见的循环代码,显著减少了重复。

  • 修改后的代码更短、更简单,出现 Bug 的机会更少。

  • 读代码的人能很快看出代码的意图,因为它不会隐藏在低级控制流后面。


另外两个高阶函数是 map (将函数应用于集合的每个元素)和 filter (通过一个谓词来选择集合中的一些元素)。


确切的语法在不同语言中会有所不同,这里的 JavaScript 中的用法(使用一个匿名函数作为参数):


如,在 Python 中,list 可以被理解为等同于 map 和 filter,但是但通常是首选


注意:别做得太过分了!


如果使用函数式会使循环变得更难理解,

或者在你所用的语言中被认为是不符合惯例的,就不要用函数式重写这个循环。


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

发表时间:February 07, 2022