博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于if-else代码的优化
阅读量:5148 次
发布时间:2019-06-13

本文共 2919 字,大约阅读时间需要 9 分钟。

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

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

 

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 somethings11 break;12     default:13 // TODO somethings14 }

 

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

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 somethings10 11 while(condition1) {12     if(!condition2) {13         continue; // or break14     } 15     // TODO somethings16 }

 

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 something414 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 sometings114 15     if(!condition2) {16         return;17     }18     // TODO something219 20     if(!condition3) {21         return;22     }23     // TODO something324 }

 

 

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

 

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

你可能感兴趣的文章
C#三层ATM-8.存款、取款功能设计
查看>>
Java学习笔记【十三、多线程编程】
查看>>
关于电池容量的相关知识点
查看>>
【STL源码剖析读书笔记】【第6章】算法之set相关算法
查看>>
IOS学习:常用第三方库(GDataXMLNode:xml解析库)
查看>>
C语言gets雨scanf函数的用法
查看>>
mac通过brew安装kafka
查看>>
vue计算属性无法监听到数组内部变化
查看>>
【HDOJ】【3480】Division
查看>>
【BZOJ】【3991】【SDOI2015】寻宝游戏
查看>>
Bootstrap文件上传组件
查看>>
python中split()、os.path.split()函数用法
查看>>
前端必读:浏览器内部工作原理
查看>>
重载 CreateParams 方法[1]: 从一个例子开始(取消窗口最大化、最小化按钮的三种方法)...
查看>>
c++强制转化
查看>>
ASIHttpRequest 学习
查看>>
C# - 接口的继承
查看>>
浅析e.target与e.currentTarget的区别
查看>>
1057. Stack (30) (浙大13年机试题)
查看>>
jQuery.Autocomplete实现自动完成功能-搜索提示功能
查看>>