| 
                         那么,如何避免重复代码呢?这有点难,但是将逻辑提取到函数/变量通常效果很好。让我们看看下面的代码,我在重构应用程序时看到了这些代码: 
- function getJavascriptNews() { 
 -     const allNews = getNewsFromWeb(); 
 -     const news = []; 
 -   
 -     for (let i = allNews.length - 1; i >= 0; i--){ 
 -         if (allNews[i].type === "javascript") { 
 -             news.push(allNews[i]); 
 -         } 
 -     } 
 -   
 -     return news; 
 - } 
 -   
 - function getRustNews() { 
 -     const allNews = getNewsFromWeb(); 
 -     const news = []; 
 -   
 -     for (let i = allNews.length - 1; i >= 0; i--){ 
 -         if (allNews[i].type === "rust") { 
 -             news.push(allNews[i]); 
 -         } 
 -     } 
 -   
 -     return news; 
 - } 
 -  
 - function getGolangNews() { 
 -   const news = []; 
 -   const allNews = getNewsFromWeb(); 
 -  
 -   for (let i = allNews.length - 1; i >= 0; i--) { 
 -     if (allNews[i].type === 'golang') { 
 -       news.push(allNews[i]); 
 -     } 
 -   } 
 -  
 -   return news; 
 - } 
 
  
重复代码示例 
你可能已经注意到for循环在这两个函数中完全相同,除了一个小细节:我们想要的新闻类型,即javascript或rust新闻。为了避免这种重复,可以将for循环提取到一个函数中,然后从getJavascriptNews,getRustNews和getGolangNews  函数调用该函数。以下是具体操作方法: 
- function getJavascriptNews() { 
 -   const allNews = getNewsFromWeb(); 
 -   return getNewsContent(allNews, 'javascript'); 
 - } 
 -  
 - function getRustNews() { 
 -   const allNews = getNewsFromWeb(); 
 -   return getNewsContent(allNews, 'rust'); 
 - } 
 -  
 - function getGolangNews() { 
 -   const allNews = getNewsFromWeb(); 
 -   return getNewsContent(allNews, 'golang'); 
 - } 
 -  
 - function getNewsContent(newsList, type) { 
 -   const news = []; 
 -   for (let i = newsList.length - 1; i >= 0; i--) { 
 -     if (newsList[i].type === type) { 
 -       news.push(newsList[i].content); 
 -     } 
 -   } 
 -   return news; 
 - } 
 
  
在将for循环提取到getNewsContent函数中之后,getJavaScriptNews,  getRustNews和getGolangNews函数变成了简单、清晰的程序。 
(1) 进一步重构                         (编辑:泰州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |