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

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

发布时间:2019-11-05 10:05 所属栏目:21 来源:读芯术
导读:在编写代码时,条件语句是绝对必要的。然而,他们很快就会失控,最终让我们无法理解这些语句。这导致我们要么必须编写注释来解释语句的作用,要么必须花费宝贵的时间来一条一条检查代码来了解发生了什么。这很糟糕

在编写代码时,条件语句是绝对必要的。然而,他们很快就会失控,最终让我们无法理解这些语句。这导致我们要么必须编写注释来解释语句的作用,要么必须花费宝贵的时间来一条一条检查代码来了解发生了什么。这很糟糕。

看一下下面的语句:

  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不要重复)原则所说:

因此,代码越少越好:它节省了时间和精力,更易于维护,并减少了错误的出现。

(编辑:ASP站长网)

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