设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

重构的艺术:五个小妙招助你写出好代码!(3)

发布时间:2019-11-05 10:05 所属栏目:21 来源:读芯术
导读:那么,如何避免重复代码呢?这有点难,但是将逻辑提取到函数/变量通常效果很好。让我们看看下面的代码,我在重构应用程序时看到了这些代码: functiongetJavascriptNews(){ constallNews=getNewsFromWeb(); constnew

那么,如何避免重复代码呢?这有点难,但是将逻辑提取到函数/变量通常效果很好。让我们看看下面的代码,我在重构应用程序时看到了这些代码:

  1. function getJavascriptNews() { 
  2.     const allNews = getNewsFromWeb(); 
  3.     const news = []; 
  4.   
  5.     for (let i = allNews.length - 1; i >= 0; i--){ 
  6.         if (allNews[i].type === "javascript") { 
  7.             news.push(allNews[i]); 
  8.         } 
  9.     } 
  10.   
  11.     return news; 
  12.   
  13. function getRustNews() { 
  14.     const allNews = getNewsFromWeb(); 
  15.     const news = []; 
  16.   
  17.     for (let i = allNews.length - 1; i >= 0; i--){ 
  18.         if (allNews[i].type === "rust") { 
  19.             news.push(allNews[i]); 
  20.         } 
  21.     } 
  22.   
  23.     return news; 
  24.  
  25. function getGolangNews() { 
  26.   const news = []; 
  27.   const allNews = getNewsFromWeb(); 
  28.  
  29.   for (let i = allNews.length - 1; i >= 0; i--) { 
  30.     if (allNews[i].type === 'golang') { 
  31.       news.push(allNews[i]); 
  32.     } 
  33.   } 
  34.  
  35.   return news; 

重复代码示例

你可能已经注意到for循环在这两个函数中完全相同,除了一个小细节:我们想要的新闻类型,即javascript或rust新闻。为了避免这种重复,可以将for循环提取到一个函数中,然后从getJavascriptNews,getRustNews和getGolangNews 函数调用该函数。以下是具体操作方法:

  1. function getJavascriptNews() { 
  2.   const allNews = getNewsFromWeb(); 
  3.   return getNewsContent(allNews, 'javascript'); 
  4.  
  5. function getRustNews() { 
  6.   const allNews = getNewsFromWeb(); 
  7.   return getNewsContent(allNews, 'rust'); 
  8.  
  9. function getGolangNews() { 
  10.   const allNews = getNewsFromWeb(); 
  11.   return getNewsContent(allNews, 'golang'); 
  12.  
  13. function getNewsContent(newsList, type) { 
  14.   const news = []; 
  15.   for (let i = newsList.length - 1; i >= 0; i--) { 
  16.     if (newsList[i].type === type) { 
  17.       news.push(newsList[i].content); 
  18.     } 
  19.   } 
  20.   return news; 

在将for循环提取到getNewsContent函数中之后,getJavaScriptNews, getRustNews和getGolangNews函数变成了简单、清晰的程序。

(1) 进一步重构

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读