亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

萌新求教!關于多個if else如何優化代碼質量,效率更高,有什么好的建議?

萌新求教!關于多個if else如何優化代碼質量,效率更高,有什么好的建議?

白豬掌柜的 2019-06-09 10:33:29
一段代碼中,有很多的ifelse怎么去優化這個代碼varsayHello=function(personal){if(personalinstanceofLi){console.log('嘿,你好');}elseif(personalinstanceofDan){console.log('吃早飯了么');}elseif(personalinstanceofArthur){console.log('你今天看起來真漂亮')}};varLi=function(){};varDan=function(){};varArthur=function(){};sayHello(newLi());//嘿,你好sayHello(newDan());//吃早飯了么sayHello(newArthur());//你今天看起來真漂亮
查看完整描述

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();

}



查看完整回答
反對 回復 2019-06-09
  • 2 回答
  • 0 關注
  • 458 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號