为了账号安全,请及时绑定邮箱和手机立即绑定

萌新求教!关于多个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条经验 获得超7个赞

是否有好的方法优化?如何重构?

方法肯定是有的。重构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 关注
  • 445 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信