Chapter 15 使用條件述句

if 述句

簡單 if - else 述句

  • 先寫正常程式碼路徑;再處理不常見情況。
// 正確示範
fun openFile(inputFile: File, status: Status){
    if (status == SUCCESS){
        // do something
    }else{
        // do something when something goes wrong
    }
}
  • 在判斷式裡盡量使用「>=」取代「>」或使用「<=」取代「<」
// Good
if (x >= 5) // do something

//
if (x > 4) // do something

這樣做的好處是,你透過 >= 可以知道 x 一定要在 5 以上。

  • 運用統一的系統來處理錯誤狀態
if (status == ERROR){
  // do something when status is Error
  if (status == SUCCESS){
    // do something when status is success
  }else{
    // handle error
  }
}else {
   // handle success
}

上面的例子看到,一下子在 else 裡面處理錯誤情況,另一次卻又在 else 裡面處理正確的情況。 應盡力避免這種情況。

  • 避免空的 if 子句
// Good Way

if(!something){
  // do something
}

// Wrong Way
if(something){
  ;
}else{
  // do something
}
  • 考慮 else 子句
if (COLOR_MIN <= color && color <= COLOR_MAX){
  // do something
}else{
  // else color is invalid
}

即使 else 裡面沒有要做任何事。也嘗試寫下 else 。

如果使用 if 來處理例外情況可以不用寫下 else 。但如果使用 if 來處理正反等情況,一定要寫下 else 。

if - else if - else 述句串

利用布林函式呼叫簡化複雜的檢測

if(isControl(inputCharacter)){
  // do something
}
else if(isPunctuation(inputCharacter)){
  // do something
}
else {
  // do something
}

最常見的情況放在最前面以上面的例子來說,最常見的狀況應該是寫在 if 內,而不是後方的 else if 當中。 確保所有情況都考慮到了 else 內可以放入最不可能情況發生時該做的事。 如果正在使用的語言支援 when (or switch or case) 的語法,是情況可以考慮使用。

15.2 case 述句

為 when 選擇最有效的排列順序

  • 如果每個 case 的順序一樣重要,按照字母排序(增加可讀性)
  • 把正常的情況放在前面
  • 按照執行頻率排列 case 子句

使用 when 的訣竅

  • 簡化每種對應的操作
  • 利用 else 子句來檢測錯誤:讓你的 else 處理幾乎不可能出現的情況。