if-else 重構

最近發現本身寫的代碼if else太多了,有時候本身回頭看都要從新捋邏輯,很很差。決定深刻理解下if else重構。java

中心思想:函數

①不一樣分支應當是同等層次,內容至關。spa

②合併條件表達式,減小if語句數目。code

③減小嵌套,減小深層次邏輯。orm

④儘量維持正常流程代碼在外層。blog

⑤減小使用臨時變量。get

⑥儘早return!io

例子:function

①異常邏輯處理。class

public int getResult(int a, int b, int c){
        int result = 0;
        if ( a > 0){
            if(b > 0 && c >0 ){
                result = a * b * c;
            }
        }
        return result;
    }

    public int getResult2(int a, int b, int c){
        if (a < 0){
            return 0;
        }
        if (b <= 0 || c <= 0){
            return  0;
        }
        return a * b * c;
    }

兩種方式結果是同樣的,這裏重構的思想是:

1.首先減小深層嵌套,將if裏的if提出來。

2.而後將非正常的狀況放在最前面,並直接return。

② 異常邏輯處理2

int getResult(){
    int result;
    if(caseA) {
        result = functionA();
    }else{
        if(caseB){
            result = functionB();
        }
        else{
            if(caseC){
                result = functionC();
            else{
                result = normarlFunction();
            }
        }
    }
    return result;
}

判斷內層if和頂層有沒有關聯,若是沒有關聯,直接提取。

int getResult(){
    if(caseA) 
        return functionA();
 
    if(caseB)
        return functionB();
 
    if(caseC)
        return functionC();
 
    return normarlFunction();
}

 

 

 

③ 分支處理

int getResult(){
    int c= 0;
    if (type == 1) {
        a = b;
        c = a * b - b + a;
    }
    else if (type == 2) {
        b = b + a;
        c = a * b * (b + a);
    }
return c; }

這裏if else 內部處理函數會影響閱讀體驗,能夠將內部處理方法提出來,並直接return。

int getResult(){
    
    if (type == 1) {
        return gerResult1(b, c);
    }
    else if (type == 2) {
        return getResult2(b, c);
    }
}
 
int gerResult1(int a, int b){
    a = b;
    return (a * b - b + a);
}
 
int getResult2(int a, int b){
    b = b + a;
    return a * b - b + a;
}

④多重分支

int getResult(){
    if(caseA){
        return funcA();
    }
    else if(caseB){
        return funcB();
    }
    else if(caseC){
        return funcC();
    }
    else if(caseD){
        return funcD();
    }
    else if(caseE){
        return funcE();
    }
}

若是狀況限定必須有多個分支,能夠改外用map實現,極大提升可閱讀性。

int getResult(){
    Map<String, Object> resultMap = new HashMap();
    resultMap.put(caseA, functionA());
    resultMap.put(caseB, functionB());
    resultMap.put(caseC, functionC());
    resultMap.put(caseD, functionD());
    resultMap.put(caseE, functionE());
    return resultMap.get(case);
}
相關文章
相關標籤/搜索