| 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 可以被理解为等同于 map
和 filter
,但是但通常是首选)。
原文作者: Cathal Weakliam
原文链接:Code Health: Now You’re Thinking With Functions?
发表时间: February 07, 2022