相信大伙儿都见过这样的代码:
if (true) {
// do something
if (true) {
// do something
if (true) {
// do something
if (true) {
// do something
if (true) {
// do something
}
}
}
}
}
功能跑起来没问题,但是作为一名追求代码精简的程序员,能用一行代码完成功能绝不写三行。业务开发过程中正好也遇到这样的重构诉求,于是有了这篇重构过程复现和衍生思考博客。
结论先行,重构这类嵌套if-else的代码,我主要采取了以下三种方式:
- 三目运算符
- 方法分层
- 多态
2.优化思路
下面我将以实例的方式呈现这个重构过程。
重构前的业务代码是长这样的:
2.1.三目运算符
利用三目运算符对一些简单if-else进行优化。
就像这样:
不使用三目运算符:
if (queryParam.getCreateStartTime() != 0) {
String strStartDate = DateUtils.longToFormatDate(queryParam.getCreateStartTime());
}
使用三目运算符:
String strStartDate = !(queryParam.getCreateStartTime() == 0 || queryParam.getCreateEndTime() == 0) ? DateUtils.longToFormatDate(queryParam.getCreateStartTime()) : null;
2.2.方法分层
所谓方法分层是受到设计模式里面的单一职责原则(SRP)启发,代码中很多参数需要判空。这时候抽象一个方法出来进行所有的参数合法性校验,以此达到代码简化的目的。
业务代码只进行业务逻辑编写,参数校验统一由参数校验方法完成。
就像这样:
@Override
public void checkListQueryParams(ListQueryParam queryParam) {
if (Objects.isNull(queryParam.getPageNo()) || Objects.isNull(queryParam.getPageSize())) {
throw new