简单且非常实用的代码优化技巧-会一直收集并增加

前言

对于代码优化,对于很多团队和项目来说基本可有可无,毕竟能跑得起来才是大事。对于个人就是一个自己能不能看得过去的问题了,忙起来是坨~也无关紧要了

如果一个团队从开始就有代码规范,整个团队的代码风格一定也还不错

因为确实有的代码就是会看起来舒服,改起来也容易,排查问题以及需要优化性能时也顺手。差劲的代码读起来心累,改的时候提心吊胆,深怕影响到核心功能,怕改一下房子都塌掉了

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比较多考虑使用策略模式,太长了代码没法看逻辑都混在一起

相关推荐
陈随易5 小时前
编程语言级别的Skill市场,AI Agent 的未来形态
前端·后端·程序员
IT_陈寒8 小时前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
子兮曰8 小时前
Agency-Agents 深度解析:400+ AI 专家的"梦之队"如何重塑开发工作流
前端·后端·vibecoding
用户8356290780519 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
小满zs9 小时前
Go语言第二章(小无相功)
后端·go
用户8356290780519 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
karry_k9 小时前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
妙码生花9 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十九):点选验证码代码逐行目检
前端·后端·go
贰先生9 小时前
Xiuno BBS X版 用户封禁系统
后端
karry_k9 小时前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端