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