最近發現本身寫的代碼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); }