代碼順序的重要性

背景

在修改前輩留下來的代碼時踩到一個坑。簡單講一下代碼作了什麼事:在 try/catch 裏實例化多個類,並調用類的方法爲其賦值,catch 到錯誤也不會中斷,而是經過打日誌的形式收集報錯信息。javascript

我須要在裏面新實例化一個類,有樣學樣,上來就是一頓copy改,但是新增的類的某個屬性老是不對,排查了半天才發現一個坑。java

錯誤模擬

class Point {
  constructor(x, y) {
    this.x = x
    this.y = y
  }

  getX() {
    return this.x
  }

  setX(x) {
    this.x = x
  }
}

let p, cat
try {
  p = new Point(1, 2)

  cat = new Cat('胖虎')  // 這裏實例化了一個不存在的類,用來模擬報錯,實際狀況比這個複雜

  p.setX(66)  //  這一行應該寫在 `cat` 的前面,否則 `cat` 報錯後直接中斷下面語句的執行,致使這行語句沒有執行

} catch (e) {
  console.log(e)
}

console.log(p.getX())

執行結果,x 沒有被賦值成66,拋出錯誤致使程序中斷,賦值語句沒有執行
執行結果this

正確的寫法

class Point {
  constructor(x, y) {
    this.x = x
    this.y = y
  }

  getX() {
    return this.x
  }

  setX(x) {
    this.x = x
  }
}

let p, cat
try {
  p = new Point(1, 2)

  p.setX(66)  // 方法調用緊隨實例後面,不受下面代碼的影響

  cat = new Cat('胖虎')

} catch (e) {
  console.log(e)
}

console.log(p.getX())

執行結果,x 正確被賦值,錯誤也正常拋出
執行結果3d

總結

  1. 若是 catch 了錯誤又不拋出,能夠在調試的時候把錯誤拋出,方便發現問題。
  2. 代碼結構順序和整潔性很重要。
  3. 若是出現這種傻瓜式錯誤,是該考慮重構代碼了。

博客首發地址:https://www.jianshu.com/u/13cd86311525調試

相關文章
相關標籤/搜索