5

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

 2 years ago
source link: https://www.continuousdelivery20.com/blog/ch-now-youre-thinking-with-functions/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
现在,你该考虑函数式编程了么?

乔梁 | 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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK