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代码的优化的更多相关文章

  1. Java开发代码性能优化总结

    代码优化,可能说起来一些人觉得没用.可是我觉得应该平时开发过程中,就尽量要求自己,养成良好习惯,一个个小的优化点,积攒起来绝对是有大幅度效率提升的.好了,将平时看到用到总结的分享给大家. 代码优化的目 ...

  2. Java开发中程序和代码性能优化

    现在计算机的处理性能越来越好,加上JDK升级对一些代码的优化,在代码层针对一些细节进行调整可能看不到性能的明显提升, 但是我觉得在开发中注意这些,更多的是可以保持一种性能优先的意识,对一些敲代码时间比 ...

  3. Python 代码性能优化技巧(转)

    原文:Python 代码性能优化技巧 Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化. ...

  4. Android代码内存优化建议-OnTrimMemory优化

    原文  http://androidperformance.com/2015/07/20/Android代码内存优化建议-OnTrimMemory优化/ OnTrimMemory 回调是 Androi ...

  5. JAVA_eclipse 保留Java文件时自动格式化代码和优化Import

    Eclipse 保存Java文件时自动格式化代码和优化Import Eclipse中format代码的快捷方式是ctrl+shift+F,如果大家想保存 java文件的时候 自动就格式化代码+消除不必 ...

  6. JavaScript代码性能优化总结

    JavaScript 代码性能优化总结 尽量使用源生方法 javaScript是解释性语言,相比编译性语言执行速度要慢.浏览器已经实现的方法,就不要再去实现一遍了.另外,浏览器已经实现的方法在算法方面 ...

  7. Html代码seo优化最佳布局实例讲解

    搜索引擎对html代码是非常优化的,所以html的优化是做好推广的第一步.一个符合seo规则的代码大体如下界面所示. 1.<!–木庄网络博客–> 这个东西是些页面注释的,可以在这里加我的& ...

  8. 利用封装、继承对Java代码进行优化

    注:本文实例分别可以在oldcastle(未优化的代码)和newcastle(优化后的代码)中查看,网址见文末 城堡游戏: 城堡中有多个房间,用户通过输入north, south, east, wes ...

  9. java代码之美(11)---java代码的优化

    java代码的优化 随着自己做开发时间的增长,越来越理解雷布斯说的: 敲代码要像写诗一样美.也能理解有一次面试官问我你对代码有洁癖吗? 一段好的代码会让人看就像诗一样,也像一个干净房间会让人看去很舒服 ...

  10. 嵌入式程序设计中C/C++代码的优化

    虽然使软件正确是一个工程合乎逻辑的最后一个步骤,但是在嵌入式的系统开发中,情况并不总是这样的.出于对低价产品的需求,硬件的设计者需要提供刚好足够的存储器和完成工作的处理能力.所以在嵌入式软件设计的最后 ...

随机推荐

  1. 第3.10节 Python强大的字符串格式化新功能:使用format字符串格式化

    一.    引言 前面两节介绍的字符串格式化方法,都有其本身对应的缺陷,老猿不建议大家使用,之所以详细介绍主要是考虑历史代码的兼容性,方便大家理解前人留下的代码.老猿推荐大家新编码时使用format方 ...

  2. 第3.8节 Python百分号占位符的字符串格式化方法

    一.    概念         格式化字符串就是将一些变量转换为字符串并按一定格式输出字符串,包括指定字符的位置.对齐方式.空位补充方式等.Python提供了多种字符串格式设置方法.本节先介绍一种简 ...

  3. 在Python实现print标准输出sys.stdout、stderr重定向及捕获的简单办法

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 Python中的标准输出和错误输出由sys模块的stdout.stde ...

  4. PyQt(Python+Qt)学习随笔:QTabWidget部件选项卡可用状态访问方法isTabEnabled、setTabEnabled

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTabWidget的每个选项卡及页面可设置是否可用,如果选项卡不可用时,则不能通过操作手工切换到该 ...

  5. 第10.2节 查看导入的Python模块

    在Python中,要查看导入模块,可以使用sys.modules来查看,不过sys包含了所有导入模块包括内建模块,如果需要过滤掉内建模块甚至扩展模块,则需要对sys.modules进行一下过滤. 一. ...

  6. XFF SSTI 模板注入 [BJDCTF2020]The mystery of ip

    转自https://www.cnblogs.com/wangtanzhi/p/12328083.html SSTI模板注入:之前也写过:https://www.cnblogs.com/wangtanz ...

  7. sql绕过小技巧

    两个空格代替一个空格,用Tab代替空格,%a0=空格: %20 %09 %0a %0b %0c %0d %a0 %00 /**/ /*!*/ 最基本的绕过方法,用注释替换空格: /* 注释 */ 使用 ...

  8. git——同步本地文件到github上

    参考教程: 1.https://blog.csdn.net/weixin_37769855/article/details/99439904 2.https://www.liaoxuefeng.com ...

  9. PCANBasic开发(二)

    使用Peak的PCan转换器开发,使用其中的PCanBasic.dll // PCANBasic.cs // // ~~~~~~~~~~~~ // // PCAN-Basic API // // ~~ ...

  10. 【题解】Casting Spells(UVA1470)

    虽然训练指南上没有讲 Manacher--但是这题几乎就是一个裸的 Manacher啊-- 然而书上的标签是:有难度,配合数据结构 Manacher详解 题意 问给定字符串中最大的W串的长度.其中W串 ...