加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

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

发布时间:2019-11-05 16:53:38 所属栏目:建站 来源:读芯术
导读:糟糕的代码可以运作,但迟早会让我们支付价钱。你有没有碰着过这样的题目:几周后,你无法领略本身的代码,于是不得不花上几个小时,乃至几天的时刻来弄清晰到底产生了什么。 办理这个常见题目的要领是使代码尽也许清楚。假如做得更好的话,纵然长短技强人

在编写代码时,前提语句是绝对须要的。然而,他们很快就会失控,最终让我们无法领略这些语句。这导致我们要么必需编写注释来表明语句的浸染,要么必需耗费名贵的时刻来一条一条搜查代码来相识产生了什么。这很糟糕。

看一下下面的语句:

  1. function checkGameStatus() { 
  2.   if ( 
  3.     remaining === 0 || 
  4.     (remaining === 1 && remainingPlayers === 1) || 
  5.     remainingPlayers === 0 
  6.   ) { 
  7.     quitGame(); 
  8.   } 

伟大的前提语句

假如只看前面函数里if语句中的代码,很难领略产生了什么。代码表意不清晰,不清晰的代码只会导致技能错误,还会让人们很是头痛。

奈何改进前提语句呢?可以把它写成一个函数。以下是详细操纵要领:

  1. function isGameLost() { 
  2.   return ( 
  3.     remaining === 0 || 
  4.     (remaining === 1 && remainingPlayers === 1) || 
  5.     remainingPlayers === 0 
  6.   ); 
  7.  
  8. // Our function is now much easier to understand: 
  9. function checkGameStatus() { 
  10.   if (isGameLost()) { 
  11.     quitGame(); 
  12.   } 

把前提语句写成函数

通过将前提提取到具有描写性名称isGameLost()的函数中,checkGameStatus函数此刻就变得很轻易领略。为什么?由于代码表意更清楚。它可以或许汇报我们产生了什么,这是我们应该一向全力的偏向。

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

3. 用卫语句(Guard Clauses)取代嵌套的if语句

嵌套if语句是在代码中也许碰着的最可骇的工作之一。你要是想可以或许完全把握代码的环境,这绝对会让你精疲力竭。下面是一个嵌套if语句的例子(这个嵌套有三层):

  1. function writeTweet() { 
  2.   const tweet = writeSomething(); 
  3.  
  4.   if (isLoggedIn()) { 
  5.     if (tweet) { 
  6.       if (isTweetDoubleChecked()) { 
  7.         tweetIt(); 
  8.       } else { 
  9.         throw new Error('Dont publish without double checking your tweet'); 
  10.       } 
  11.     } else { 
  12.       throw new Error("Your tweet is empty, can't publish it"); 
  13.     } 
  14.   } else { 
  15.     throw new Error('You need to log in before tweeting'); 
  16.   } 

嵌套的if语句

你也许必要花几分钟时刻上下阅读,才气相识函数运作的流程。嵌套的if语句很难让人阅读和领略。那么,怎样才气挣脱厌恶的嵌套if语句呢?可以反向思索,行使卫语句来更换这些句子。

“在计较机措施计划中,卫语句是一个布尔表达式,假如措施要在有题目的分支里继承运行的话,它的求值必需为true。”——维基百科

通过颠倒函数的逻辑,并在函数开始时安排导致早期退出的前提,它们将变为掩护措施,而且只应承函数在满意全部前提时继承执行。这样可以停止else语句。下面是怎样重构之前的函数以行使卫语句的要领:

  1. function writeTweet() { 
  2.   const tweet = writeSomething(); 
  3.  
  4.   if (!isLoggedIn()) { 
  5.     throw new Error('You need to log in before tweeting'); 
  6.   } 
  7.   if (!tweet) { 
  8.     throw new Error("Your tweet is empty, can't publish it"); 
  9.   } 
  10.   if (!isTweetDoubleChecked()) { 
  11.     throw new Error('Dont publish without double checking your tweet'); 
  12.   } 
  13.  
  14.   tweetIt(); 

用卫语句重构函数

如你所见,代码更清楚,更轻易领略。我们可以简朴向下阅读来相识函数的浸染,遵循函数的天然活动,不像早年那样上下阅读。

4. 不要写一再的代码

写一再的代码老是以失败了却。它会导致如下环境:“我在这里修复了这个bug,可是健忘在哪里修复”或“我必要在五个差异的处所变动/添加一个新成果”。

正如DRY(Don’t repeat yourself不要一再)原则所说:

因此,代码越少越好:它节减了时刻和精神,更易于维护,并镌汰了错误的呈现。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读