关于if-else代码的优化

it2025-10-27  3

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

1.通过switch-case优化

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

 

1 int value = this.getValue(); 2 if(value==1) { 3 // TODO somethings 4 } else if(value==2) { 5 // TODO somethings 6 } else if(value==3) { 7 // TODO somethings 8 } else { 9 // TODO somethings 10 }

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

 

1 int value = this.getValue(); 2 switch (value) { 3 case 1: 4 // TODO somethings 5 break; 6 case 2: 7 // TODO somethings 8 break; 9 case 3: 10 // TODO somethings 11 break; 12 default: 13 // TODO somethings 14 }

 

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

2.使用条件三目运算符

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

比如下面代码:

 

1 int value = 0; 2 if(condition) { 3 value=1; 4 } else { 5 value=2; 6 }

可以优化成:

 

1 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 } }

 

可以分别优化成

 

1 if(!condition) { 2 return; 3 } 4 // TODO somethings 5 6 if(!condition) { 7 throw new Exception(); 8 } 9 // TODO somethings 10 11 while(condition1) { 12 if(!condition2) { 13 continue; // or break 14 } 15 // TODO somethings 16 }

 

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

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

1 int key = this.getKey(); 2 int value = 0; 3 if(key==1) { 4 value = 1; 5 } else if(key==2) { 6 value = 2; 7 } else if(key==3) { 8 value = 3; 9 } else { 10 throw new Exception(); 11 }

 

这段代码可以优化成:

1 Map map = new HashMap(); 2 map.put(1,1); 3 map.put(2,2); 4 map.put(3,3); 5 6 int key = this.getKey(); 7 if(!map.containsKey(key)) { 8 throw new Exception(); 9 } 10 11 int value = map.get(key);

 

 

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

1 public void fun1() { 2 3 if(condition1) { 4 // TODO sometings1 5 if(condition2) { 6 // TODO something2 7 if(condition3) { 8 // TODO something3 9 } 10 } 11 } 12 13 // TODO something4 14 15 }

 

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

1 public void fun1() { 2 3 this.fun2(); 4 5 // TODO something4 6 7 } 8 9 private void fun2() { 10 if(!condition1) { 11 return; 12 } 13 // TODO sometings1 14 15 if(!condition2) { 16 return; 17 } 18 // TODO something2 19 20 if(!condition3) { 21 return; 22 } 23 // TODO something3 24 }

 

 

6.用设计模式优化if-else逻辑 例如用工厂模式、模板方法模式(就是多态)进行优化,这类方法网上有很多讲解,我就不班门弄斧了 以上是我在工作中经常使用的优化if-else的方法,如果有错误或者还有其他的方法,还望大家不吝赐教

 

转载于:https://www.cnblogs.com/billmiao/p/9872156.html

最新回复(0)