那么,如何避免重复代码呢?这有点难,但是将逻辑提取到函数/变量通常效果很好。让我们看看下面的代码,我在重构应用程序时看到了这些代码:
- 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) 进一步重构 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|