if-else和很多的if-else

if-else

if(運算式)
    一般路徑
else
    非一般路徑

某個種條滿足,執行多擇一的程式段。

運算式的運算符號

運算式裡的運算,建議用範圍成立,代替精準比對。例如:用><取代==,程式碼會來得可靠多了。(可以避免浮點數的誤差帶來的萬一)

很多的if-else

很多時候,if-else會集體出現,往往在程式碼的排列上,讓程式設計師手足無措,這樣寫也好,那樣寫也可以,那有沒有個準則呢?

  • 多重條件滿足

  • 執行結果滿足

if(判斷A){
    例外A----------------x
}else{
    正常A----------------o
    if (判斷B){
        正常B------------o
        if (判斷C){
            例外C--------x
        else
            正常C--------o
    }else
        例外B------------x
}

建議改成這樣寫,上下一對,由外往內可以看見if-else成對的相反路徑。

if(判斷A){
    正常A----------------o1
    if (判斷B){
        正常B------------o2
        if (判斷C){
            正常C--------o3
        else
            例外C--------x3
    }else
        例外B------------x2
}else{
    例外A----------------x1
}

特別小心

  1. 沒有else時,寫一下註解。

  2. 測試else的邏輯

  3. 檢查相反的邏輯運算式

連續的if-else-if-else...

「多選一」的程式段,選擇其中一個執行

if ( ... )
{
    //最常見
}
else if ( ... )
{
    //次常見
}
else if ( ... ) 
{
    //不常見
}

愈常執行或愈有直觀意義的放在愈靠近第一個if裡執行。

else的妙用

要用所有的if-else包含所有的情況,這時else就要拿來處理「絕對不應該發生」的情況。

//一個只有三種情況的範例,其它情況為「不該發生的情況」
if ( 是否為情況一 ) {
    //情況一
}else if ( 是否為情況二 ) {
    //情況二
}else if ( 是否為情況三 ) {
    //情況三
}else{
    //不該發生的情況
    //用assert(0) hight-light
}

參考自《Code Complete2》

Last updated

Was this helpful?