关于if-else代码的优化

if-else分支代码在我们日常开发中基本上是最常用的逻辑,但是,经常在if-else代码过多的情况下,代码会变得特别臃肿,并且代码的可扩展性会变得不好,所以,优化if-else代码逻辑是很有必要的。以下介绍几种我在日常工作中比较常用的优化手段

1.通过switch-case优化

这是最简单的优化方式,基本上每一个程序员都能运用。下面举个例子:

int value = this.getValue();
if(value==1) {
     // TODO somethings
} else if(value==2) {
     // TODO somethings
} else if(value==3) {
     // TODO somethings
} else {
     // TODO somethings
}

上面的代码,可以优化为:

int value = this.getValue();
switch (value) {
    case 1:
// TODO somethings
break;
    case 2:
// TODO somethings
break;
    case 3:
// TODO somethings
break;
    default:
// TODO somethings
}

这种优化,除了代码性能上有极小的优化之外,基本是换汤不换药,代码依然是很臃肿,可扩展性一样不好,所以,不建议用这种优化方式

2.使用条件三目运算符

条件三目运算符基本上每一个程序员也都知道,但是,应用在日常开发上的人很少,这玩意儿经常会被人所忽略。

比如下面代码:

int value = 0;
if(condition) {
    value=1;
} else {
    value=2;
}

可以优化成:

int value = condition ? 1 : 2;

经过这样优化,代码立刻变得清晰明了

3.异常/return/continue/break 语句前置

例如代码:

if(condition) {
    // TODO somethings
} else {
    return;
}
if(condition) {
    // TODO somethings
} else {
    throw new Exception();  
}
while(condition1) {
    if(condition2) {
        // TODO somethings
    } else {
        continue; // or break
    }
}

可以分别优化成

if(!condition) {
    return;
} 
// TODO somethings
if(!condition) {
   throw new Exception();   
}
// TODO somethings
while(condition1) {
    if(!condition2) {
        continue; // or break
    } 
    // TODO somethings
}

4.使用表驱动法优化if-else分支

这是优化if-else的利器,也是我在日常工作中最经常使用的一种优化方法。使用了这种方法,真正做到了把if-else变成配置化。表驱动法优化也很简单,我们看下面一段代码:

int key = this.getKey();
int value = 0;
if(key==1) {
    value = 1;
} else if(key==2) {
    value = 2;
} else if(key==3) {
    value = 3;
} else {
    throw new Exception();
}

这段代码可以优化成:

Map map = new HashMap();
map.put(1,1); 
map.put(2,2); 
map.put(3,3); 

int key = this.getKey(); 
if(!map.containsKey(key)) { 
    throw new Exception(); 
} 

int value = map.get(key);

这种优化方法,基本把if-else逻辑消灭了。当增加另一个值时,直接修改map,而不需要再增加分支
需要注意的是,这种方法不仅仅适合单个值赋值,里面的value还可以是方法名,利用反射进行调用

5.抽象出另一个方法,优化该方法的if-else逻辑
例如:

public void fun1() {

    if(condition1) {
        // TODO sometings1
        if(condition2) {
            // TODO something2
            if(condition3) {
                // TODO something3
            }
        }
    }

    // TODO something4

}

这段代码,if的逻辑很深,让阅读代码的人很难进行下去。下面我们抽象出另一个方法,进行优化

public void fun1() {

    this.fun2();

    // TODO something4

}

private void fun2() {
    if(!condition1) {
        return;
    }
    // TODO sometings1

    if(!condition2) {
        return;
    }
    // TODO something2

    if(!condition3) {
        return;
    }
    // TODO something3
}

6.用设计模式优化if-else逻辑
例如用工厂模式、模板方法模式(就是多态)进行优化,这类方法网上有很多讲解,我就不班门弄斧了

以上是我在工作中经常使用的优化if-else的方法,如果有错误或者还有其他的方法,还望大家不吝赐教

 

 

 

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值