2分钟编程技巧:不要在代码中使用循环

开发 前端 移动开发
您应该使用像map、filter和reduce这样的函数,而不是编写for或while循环。这是个推荐做法,因为:循环使产生代码副作用变得容易,而副作用就会使代码逻辑变成意大利面条,杂乱无章。

2分钟编程技巧:不要在代码中使用循环

您应该使用像map、filter和reduce这样的函数,而不是编写for或while循环。这是个推荐做法,因为:

循环使产生代码副作用变得容易,而副作用就会使代码逻辑变成意大利面条,杂乱无章。

当你试图同时做不止一件事情时,循环会你陷入痛苦。

函数式编程可以防止代码产生与感冒药一样多的副作用。它迫使你一次只做一件事,而且比循环更具可读性。

循环,就像指针一样,是一种简单的编程方法。它们对于某些关键代码非常有用,但我想会说,我们中很少有人在研究显卡驱动程序。

让我们切入正题——这里有一个JavaScript程序的比较。首先,老旧的循环版本: 

  1. const cats = ['Antonio''Squid''Tornado''Avocado''Barnacles''Abroteus'];  
  2. const stringStartsWithA = x => x[0].toLowerCase() === 'a' 
  3. const catsWhoseNameStartsWithA = [];  
  4. for (let i = 0; i < cats.length; i++) { 
  5.   if (stringStartsWithA(cats[i])) { 
  6.     catsWhoseNameStartsWithA.push(cats[i]); 
  7.   } 
  8.  
  9. console.log(catsWhoseNameStartsWithA);  
  10. // Output
  11. // ["Antonio""Avocado""Abroteus"

下面是新式的函数式编程: 

  1. const cats = ['Antonio''Squid''Tornado''Avocado''Barnacles''Abroteus'];  
  2. const stringStartsWithA = x => x[0].toLowerCase() === 'a' 
  3. const catsWhoseNameStartsWithA = cats.filter(stringStartsWithA);  
  4. console.log(catsWhoseNameStartsWithA);  
  5. // Output
  6. // ["Antonio""Avocado""Abroteus"

当然,这是一个简单的示例,并且很可能是一个非常适合过滤器(filter)的用例。尽管如此,我们还是把5行混乱的代码变成了….0行?在***个示例中,我们已经使用了一行代码来声明数组。

这里的乐趣并没有到此为止:我们用过滤器来做例子,但还有更多像map, reduce, sort和flatten这样的用法。它们为我们编写有创意,优雅,最重要的是易于理解的代码提供了巨大的空间!

你怎么认为?也许我的例子有失偏颇,也许我完全错了。请在评论中告诉我-我感谢任何和所有的反馈!

责任编辑:未丽燕 来源: 程序师
相关推荐

2022-08-10 14:36:05

Python循环函数

2021-03-29 08:05:15

User项目安全

2023-09-27 10:19:37

类型video函数

2017-09-27 11:00:50

LinuxBash使用技巧

2021-03-04 21:57:12

Python编程语言计算

2023-08-31 09:10:18

JavaScript调试

2019-04-15 14:05:56

MySQLUTF-8数据库

2020-07-09 07:37:06

数据库Redis工具

2017-07-06 08:12:02

索引查询SQL

2020-11-23 16:23:59

CSS设计技术

2020-08-17 10:50:29

Python代码get

2018-11-28 11:20:53

Python函数式编程编程语言

2009-11-12 16:25:35

Oracle嵌套循环

2013-12-19 09:20:59

2013-09-13 14:08:01

2009-11-25 09:26:39

VS2003代码

2020-05-22 10:20:27

Shiro架构字符串

2019-05-08 14:02:52

MySQL索引查询优化数据库

2009-11-25 09:02:12

2009-11-04 13:12:33

VB.NET面向对象编
点赞
收藏

51CTO技术栈公众号