用函数式,编写易维护的代码
循环是处理集合(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