关于if-else代码的优化
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的方法,如果有错误或者还有其他的方法,还望大家不吝赐教
关于if-else代码的优化的更多相关文章
- Java开发代码性能优化总结
代码优化,可能说起来一些人觉得没用.可是我觉得应该平时开发过程中,就尽量要求自己,养成良好习惯,一个个小的优化点,积攒起来绝对是有大幅度效率提升的.好了,将平时看到用到总结的分享给大家. 代码优化的目 ...
- Java开发中程序和代码性能优化
现在计算机的处理性能越来越好,加上JDK升级对一些代码的优化,在代码层针对一些细节进行调整可能看不到性能的明显提升, 但是我觉得在开发中注意这些,更多的是可以保持一种性能优先的意识,对一些敲代码时间比 ...
- Python 代码性能优化技巧(转)
原文:Python 代码性能优化技巧 Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化. ...
- Android代码内存优化建议-OnTrimMemory优化
原文 http://androidperformance.com/2015/07/20/Android代码内存优化建议-OnTrimMemory优化/ OnTrimMemory 回调是 Androi ...
- JAVA_eclipse 保留Java文件时自动格式化代码和优化Import
Eclipse 保存Java文件时自动格式化代码和优化Import Eclipse中format代码的快捷方式是ctrl+shift+F,如果大家想保存 java文件的时候 自动就格式化代码+消除不必 ...
- JavaScript代码性能优化总结
JavaScript 代码性能优化总结 尽量使用源生方法 javaScript是解释性语言,相比编译性语言执行速度要慢.浏览器已经实现的方法,就不要再去实现一遍了.另外,浏览器已经实现的方法在算法方面 ...
- Html代码seo优化最佳布局实例讲解
搜索引擎对html代码是非常优化的,所以html的优化是做好推广的第一步.一个符合seo规则的代码大体如下界面所示. 1.<!–木庄网络博客–> 这个东西是些页面注释的,可以在这里加我的& ...
- 利用封装、继承对Java代码进行优化
注:本文实例分别可以在oldcastle(未优化的代码)和newcastle(优化后的代码)中查看,网址见文末 城堡游戏: 城堡中有多个房间,用户通过输入north, south, east, wes ...
- java代码之美(11)---java代码的优化
java代码的优化 随着自己做开发时间的增长,越来越理解雷布斯说的: 敲代码要像写诗一样美.也能理解有一次面试官问我你对代码有洁癖吗? 一段好的代码会让人看就像诗一样,也像一个干净房间会让人看去很舒服 ...
- 嵌入式程序设计中C/C++代码的优化
虽然使软件正确是一个工程合乎逻辑的最后一个步骤,但是在嵌入式的系统开发中,情况并不总是这样的.出于对低价产品的需求,硬件的设计者需要提供刚好足够的存储器和完成工作的处理能力.所以在嵌入式软件设计的最后 ...
随机推荐
- charles解决乱码
1.点击help ssl proxying ,install Charles Root Certificate 2.点击安装证书按钮 3:点击下一步按钮 4:选中将所有的证书都放入下列存储 点击浏览按 ...
- Kafak探究之路- 内部结构小结
1.框架与工作流 2 内部结构 kafka的每个主题分区的数据在 first-0(主题名-分区号)文件夹下,保存 n组xxx.log文件与xxx.index文件.log文件存发送消息的元数据,每个大小 ...
- python核心高级学习总结2----------pdb的调试
PDB调试 def getAverage(a,b): result =a+b print("result=%d"%result) return result a=100 b=200 ...
- 第9.3节 Python的文件行读取:readline
一. 语法 readline(size=-1) readline函数顾名思义就是从文件内读取一行,用来处理文本文件读取的典型方法之一,但readline可不只是读取文本文件,也能读取二进制文件,只是在 ...
- PyQt(Python+Qt)学习随笔:QScrollArea滚动区域的scrollAreaWidgetContents、widget及setWidget等相关概念解释
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在Designer中设计将一个lable放到滚动区域上,使用PyUIC生成代码后,可以看到除了QSc ...
- HTTP接口传输数据常用的方式
Get方式是从服务器上获取数据,在数据查询时,建议用Get方式:如商品信息接口.搜索接口等 Post方式是向服务器传送数据,做数据添加.修改或删除时,建议用Post方式,如登录注册接口等. 1.GET ...
- Fiddle抓包应用概述
抓包: 抓包(packet capture)就是将网络传输发送与接收的数据包进行截获.重发.编辑.转存等操作,也用来检查网络安全.抓包也经常被用来进行数据截取等.说简单点就是抓取前端发送给服务器的数据 ...
- AcWing 334. K匿名序列
大型补档计划 题目链接 就是把序列分成无数段,每段长度 $ >= K$,然后 \([l, r]\) 这段的花费是 \(S[r] - S[l - 1] - (r - l + 1) * a[l]\) ...
- nginx优化-转载
(1)nginx运行工作进程个数,一般设置cpu的核心或者核心数x2 如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor / ...
- 自搭建jetbrains系列ide授权服务器
1.下载 LicenseServer 地址:https://mega.nz/#!7B5UVY6b!Hae2ceTBPIrTowQN0sV9fQ5lGOKzGxas2ug02RZAdGU,里面有不同的服 ...