前言
对于代码优化,对于很多团队和项目来说基本可有可无,毕竟能跑得起来才是大事。对于个人就是一个自己能不能看得过去的问题了,忙起来是坨~也无关紧要了
如果一个团队从开始就有代码规范,整个团队的代码风格一定也还不错
因为确实有的代码就是会看起来舒服,改起来也容易,排查问题以及需要优化性能时也顺手。差劲的代码读起来心累,改的时候提心吊胆,深怕影响到核心功能,怕改一下房子都塌掉了
IF-ELSE 优化
核心减少if else嵌套,也叫卫语句,在结果上让代码结构上看起来比较直。虽然这个很简单但是很多人忽略甚至不知道!!!反复使用好代码一定好看很多
- 使用取反优先结束少代码块逻辑
java
public void ifElseAndCodeBlock() {
if (conditionA) {
// 比较多的业务代码......
return;
}
}
public void oneIfToTheEnd1() {
if (conditionA) {
// 比较多的业务代码......
return;
} else {
// 这里throw异常或者return最应该提前结束了!!!
throw RuntimeException("Don't meet conditionA!");
}
}
public void oneIfToTheEnd2() {
if (conditionA) {
// 比较多的业务代码......
return;
} else {
// 相对少的业务代码......
return;
}
}
优化后结果
java
public void oneIfToTheEndOptimize() {
if (!conditionA) {
// return、throw或者少代码块
return;
}
// 比较多的业务代码......
}
- if else后有公共部分
java
public void ifElseAndCodeBlock() {
if (conditionA) {
//业务代码1......(代码多)
} else {
//业务代码2......
}
//业务3
}
业务3代码不多就重复写两遍,多的话就抽出来。写在一起也更好,有时代码长了都不好看到3,还要找对应括号看哪里是共用逻辑块3。这里也要遵循少的先结束
csharp
public void ifElseAndCodeBlockOptimize1() {
if (!conditionA) {
//业务代码2......
//业务3
return;
}
//业务代码1......(代码多)
//业务3
return;
}
- 使用&将条件平铺
csharp
public void nestIf() {
//业务代码1......
if (conditionA) {
if (conditionB) {
if (conditionC) {
//业务代码2......
} else {
//业务代码3......
}
}
}
}
优化后
csharp
public void nestIfOptimize() {
//业务代码1......
if (conditionA && conditionB && conditionC) {
//业务代码2......
return;
}
if (conditionA && conditionB && !conditionC) {
//业务代码3......
return;
}
}
-
还有一些关于IF-ELSE简单优化技巧
使用三目运算符: if-else中代码只有一两行可以考虑
使用Java8的Optional函数
java
String postCode = "";
if(user != null){
if(user.getAddress() != null){
Address address = user.getAddress();
if(address.getCity() != null){
City city = address.getCity();
if(city.getPostCode() != null ){
postCode = city.getPostCode();
}
}
}
}
String postCode = Optional.ofNullable(user) .map(e->e.getAddress()) .map(e->e.getCity())
.map(e->e.getPostCode).orElse("");
当一个函数if else比较多考虑使用策略模式,太长了代码没法看逻辑都混在一起