2 回答

TA貢獻1827條經驗 獲得超8個贊
是否有好的方法優化?如何重構?
方法肯定是有的。重構if-else時,心中無時無刻把握一個原則:
盡可能地維持正常流程代碼在最外層。
意思是說,可以寫if-else語句時一定要盡量保持主干代碼是正常流程,避免嵌套過深。
實現的手段有:減少嵌套、移除臨時變量、條件取反判斷、合并條件表達式等。
下面舉幾個實例來講解這些重構方法:
異常邏輯處理型重構方法實例一:
重構前:
double disablityAmount(){
? ? if(_seniority < 2)?
? ? ? ? return 0;
?
? ? if(_monthsDisabled > 12)
? ? ? ? return 0;
?
? ? if(_isPartTime)
? ? ? ? return 0;
?
? ? //do somethig
?
}
重構后:
double disablityAmount(){
? ? if(_seniority < 2 || _monthsDisabled > 12 || _isPartTime)?
? ? ? ? return 0;
?
? ? //do somethig
}
這里的重構手法叫合并條件表達式:如果有一系列條件測試都得到相同結果,將這些結果測試合并為一個條件表達式。
這個重構手法簡單易懂,帶來的效果也非常明顯,能有效地較少if語句,減少代碼量邏輯上也更加易懂。
異常邏輯處理型重構方法實例二:
重構前:
double getPayAmount(){
? ? double result;
? ? if(_isDead) {
? ? ? ? result = deadAmount();
? ? }else{
? ? ? ? if(_isSeparated){
? ? ? ? ? ? result = separatedAmount();
? ? ? ? }
? ? ? ? else{
? ? ? ? ? ? if(_isRetired){
? ? ? ? ? ? ? ? result = retiredAmount();
? ? ? ? ? ? else{
? ? ? ? ? ? ? ? result = normalPayAmount();
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? return result;
重構后:
double getPayAmount(){
? ? if(_isDead)?
? ? ? ? return deadAmount();
?
? ? if(_isSeparated)
? ? ? ? return separatedAmount();
?
? ? if(_isRetired)
? ? ? ? return retiredAmount();
?
? ? return normalPayAmount();
}
添加回答
舉報