成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript重構技巧 — 條件

開發 前端
JavaScript 是一種易于學習的編程語言,編寫運行并執行某些操作的程序很容易。然而,要編寫一段干凈的JavaScript 代碼是很困難的。

 JavaScript 是一種易于學習的編程語言,編寫運行并執行某些操作的程序很容易。然而,要編寫一段干凈的JavaScript 代碼是很困難的。

[[329554]]

在本文中,我們將介紹一些優化條件表達式相關的重構思路。

分解條件表達式

我們可以將長的條件表達式分解成有命名的短小條件表達多,這樣有利于閱讀。例如我們可能會寫這樣的代碼:

  1. let ieIEMac = navigator.userAgent.toLowerCase().includes("mac") && navigator.userAgent.toLowerCase().includes("ie"

上面的代碼太過冗長了,不利于閱讀,我們可以把它分解成幾個短小且有名字的條件表達式,如下所示:

  1. let userAgent = navigator.userAgent.toLowerCase(); 
  2. let isMac = userAgent.includes("mac"); 
  3. let isIE = userAgent.toLowerCase().includes("ie"); 
  4. let isMacIE = isMac && isIE; 

合并條件表達式

與上面相反的,如果有多個簡短的條件表達式,則可以將它們合并成一個。例如我們可能會寫這樣的代碼:

  1. const x = 5; 
  2. const bigEnough = x > 5; 
  3. const smallEnough = x < 6; 
  4. const inRange = bigEnough && smallEnough; 

我們可以這樣合并:

  1. const x = 5; 
  2. const inRange = x > 5 && x < 6; 

因為表達式很短,即使把它們組合在一起也不會使表達式變長,所以我們可以這樣做。

合并重復的條件片段

如果我們在條件塊中有重復的表達式或語句,則可以將它們移出。例如我們可能會寫這樣的代碼:

  1. if (price > 100) { 
  2.   //... 
  3.   complete(); 
  4. else { 
  5.   //... 
  6.   complete(); 

我們可以把重復的內容移到條件表達式外面,如下所示:

  1. if (price > 100) { 
  2.   //... 
  3. else { 
  4.   //... 
  5. complete(); 

這樣,我們不必重復不必要地調用complete函數。

刪除控制標志

如果我們在循環中使用了控制標志,那應該會這樣代碼:

  1. let done = false
  2. while (!done) { 
  3.   if (condition) { 
  4.     done = true
  5.   } 
  6.   //... 

在上面的代碼中,done 是控制標,在condition為true時,將done設置為true停止while循環。

相對于上面,我們可以使用break來停止循環,如下所示:

  1. let done = false
  2. while (!done) { 
  3.   if (condition) { 
  4.     break; 
  5.   } 
  6.   //... 

用衛語句代替嵌套條件

衛語句就是把復雜的條件表達式拆分成多個條件表達式,比如一個很復雜的表達式,嵌套了好幾層的if-then-else語句,轉換為多個if語句,實現它的邏輯,這多條的if語句就是衛語句。

嵌套條件語句很難閱讀,所以我們可以使用「衛語句」代替它們。例如我們可能會寫這樣的代碼:

  1. const fn = () => { 
  2.   if (foo) { 
  3.     if (bar) { 
  4.       if (baz) { 
  5.         //... 
  6.       } 
  7.     } 
  8.   } 

我們可以這樣優化:

  1. if (!foo) { 
  2.     return
  3.   } 
  4.   if (!bar) { 
  5.     return
  6.   } 
  7.   if (baz) { 
  8.     //... 
  9.   } 

在上面的代碼中,衛語句是:

  1. if (!foo) { 
  2.   return

  1. if (!bar) { 
  2.   return

如果這些條件為假,它們會提前返回函數,這樣,我們就不需要嵌套了。

用多態替換條件

我們可以使用switch語句為不同種類的數據創建相同的子類,而不是使用switch語句對不同類型的數據執行相同的操作,然后針對對象的類型使用不同的方法。

例如我們可能會寫這樣的代碼:

  1. class Animal { 
  2.   constructor(type) { 
  3.     this.type = type; 
  4.   } 
  5.   getBaseSpeed() { 
  6.     return 100; 
  7.   } 
  8.   getSpeed() { 
  9.     switch (this.type) { 
  10.       case ('cat'): { 
  11.         return getBaseSpeed() * 1.5 
  12.       } 
  13.       case ('dog'): { 
  14.         return getBaseSpeed() * 2 
  15.       } 
  16.       default: { 
  17.         return getBaseSpeed() 
  18.       } 
  19.     } 
  20.   } 

我們可以這樣重構:

  1. class Animal { 
  2.   constructor(type) { 
  3.     this.type = type; 
  4.   } 
  5.   getBaseSpeed() { 
  6.     return 100; 
  7.   } 
  8. class Cat extends Animal { 
  9.   getSpeed() { 
  10.     return super.getBaseSpeed() * 1.5; 
  11.   } 
  12. class Dog extends Animal { 
  13.   getSpeed() { 
  14.     return super.getBaseSpeed() * 2; 
  15.   } 

當switch語句很長時,應該為不同類型的對象定制case塊。

采用空對象

如果我們重復檢查null或undefined,則可以定義一個代表該類的null或undefined版本的子類,然后使用它。

例如我們可能會寫這樣的代碼:

  1. class Person { 
  2.   //... 

我們可以這樣重構:

  1. class Person { 
  2.   //... 
  3. class NullPerson extends Person { 
  4.   //... 

然后,我們將Person設置為null或undefined 的對象屬性,而不是將其設置為NullPerson實例。

這樣就無需使用條件檢查這些值。

John Au-Yeung 來源:medium 譯者:前端小智

原文:https://levelup.gitconnected.com/javascript-refactoring-conditionals-6d74a1138c96

本文轉載自微信公眾號「 大遷世界」,可以通過以下二維碼關注。轉載本文請聯系 大遷世界公眾號。

 

責任編輯:武曉燕 來源: 大遷世界
相關推薦

2020-06-08 08:46:59

JavaScript條件類名

2020-06-09 09:13:12

JavaScript重構對象

2022-04-21 07:20:39

Javascript重構邏輯

2020-05-27 09:30:52

JavaScript重構函數

2020-06-01 08:42:11

JavaScript重構函數

2022-07-04 08:51:43

條件語句JavaScript

2011-06-03 13:48:18

JavaScript重構

2019-06-27 10:35:40

JavaScript條件式匹配條件

2017-03-06 20:39:41

整潔代碼Clean Code

2020-12-17 07:52:38

JavaScript

2025-02-13 12:52:27

JavaScrip代碼開發

2020-09-23 10:09:43

Dockerfile

2011-06-09 15:27:01

JavaScript

2021-05-26 08:50:37

JavaScript代碼重構函數

2020-09-29 08:14:46

JavaScript開發代碼

2021-08-26 05:04:53

JavaScript調試技巧

2024-09-14 11:23:19

2024-09-23 09:00:00

Python條件控制

2023-02-06 12:00:00

重構PythonPythonic

2023-09-26 12:04:15

重構技巧Pythonic
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文在线一区二区 | 久久成人精品一区二区三区 | 欧美久久一区二区 | 91成人免费看| 国产美女精品视频免费观看 | 久久精品亚洲一区二区三区浴池 | 黄色香蕉视频在线观看 | 在线欧美一区 | 黄色一级免费 | 国产日日操 | 精品久久久久久亚洲综合网 | 久久久精品国产 | 日韩综合在线 | 亚洲福利视频一区二区 | 亚洲激情视频在线 | 日韩一区二区三区av | 亚洲精品视频免费 | 免费在线毛片 | 国产视频第一页 | www.日韩系列 | 国产日韩视频 | 精品国产一区探花在线观看 | 亚洲成人av一区二区 | 欧美精品一区二区三区四区 在线 | 午夜爽爽爽男女免费观看 | 在线欧美日韩 | 国产高清一区二区 | 日韩欧美中文字幕在线观看 | 国产在线观看一区二区三区 | 韩日有码| 日韩免费视频一区二区 | 欧美综合久久久 | 中文字幕国产 | 欧美黄色免费网站 | 国产精品日韩欧美一区二区三区 | 亚洲精品一区二区三区 | 国产成人在线一区二区 | 久久高清 | 欧美在线一区二区三区 | 久久91视频| 国产亚洲精品精品国产亚洲综合 |