鮑勃大爺:將if/else中每個條件變為邏輯並列互拆而不依賴執行順序。

banq發表於2020-11-16

當您編寫一條if / else語句鏈時,瞭解並評估執行時順序的依賴性是明智的。將每個條件構造為邏輯互斥而非依賴於執行順序可能是明智的。
 
新開發人員要學習的第一個概念是if / else語句。if / else語句是執行條件邏輯的最常見方法。但是,複雜的巢狀if / else語句可能很快成為認知負擔,並損害程式的可讀性

Guard Clauses:利用從函式中儘早返回(或繼續執行迴圈)的功能,使多維巢狀條件變成一維,不要使用if / else鏈,我們只是在每個條件塊末尾從函式中提前返回。
Go中的錯誤處理自然會鼓勵開發人員使用保護子句。
下面是誇張巢狀:

function getInsuranceAmount(status) {
  let amount;
  if (!status.hasInsurance()){
    amount = 1;
  } else {
    if (status.isTotaled()){
      amount = 10000;
    } else {
      if (status.isDented()){
        amount = 160;
        if (status.isBigDent()){
          amount = 270;
        }
      } else {
        amount = 0
      }
    }
  }
  return amount;
}

使用Guard Clauses改寫成:

function getInsuranceAmount(status) {
  if (!status.hasInsurance()){
    return 1;
  }
  if (status.isTotaled()){
    return 10000;
  }
  if (!status.isDented()){
    return 0;
  }
  if (status.isBigDent()){
    return 270;
  }
  return 160;
}


在第一個示例中,如果開發人員試圖弄清楚何時返回270,則他們需要考慮邏輯樹中的每個分支,並試圖記住哪些情況重要而哪些情況無關。使用Guard Clauses提供的一維結構,就像按順序逐步處理每種情況一樣簡單。
 

相關文章