减少变量
偶尔会看到这种代码:
public void method() {
LocalData now = LocalDate.now();
message.setCurrentTime(now);
}
在这种情况写下,其实可以直接把两句合并成一句。理论上来说,每当我们新增加了一个变量,代码的复杂度就会变高,尤其当其它人阅读这段代码的时候,他们需要多追踪一个变量的值变化。
减少中间结果
这也是经常在代码库里看到的结构:
public void method() {
Contract contract = null;
if (....) {
contract = ....
} else if(...) {
contract = ...
}
if(contract == null) {
return;
}
....
}
这种代码看起来比较难受,按道理说应该把这段和contract相关的直接抽出来
public void method() {
Contract contract = findContract();
if (contract == null) {
return;
}
....
}
private Contract findContract() {
if (....) {
return ....
}
if(...) {
return ...
}
return null;
}
这种格式带来的好处不止是去掉了一个占着位置的临时结果,还有减少了本身的if代码块缩进结构。
而且最近看到的一种写法,我们一直讲方法间尽量不要传递null值,看到代码中有人会将结果封装成Optional<T>,通过判断isPresent决定流程,不再直接判断null
减少控制流变量
Java8之后,我们经常使用forEach替代传统的for循环,却带来一个提前中断的副作用
public void method() {
Flag flag = new Flag(false);
list.forEach(e -> {
if (flag.isTrue()) {
return;
}
.....
if (..) {
flag.setTrue();
}
})
}
以前for循环的时候可能直接就可以break了,但是在forEach里,用return也只是跳出了当前循环。而且forEach外面的所有变量对于forEach里面的内容都是final的,这就意味着如果你想修改外面的flag,不能把flag作为一个boolean变脸,必须在外面再封一层。
对于这种情况,其实还不如直接改成本身的for循环
减少变量的作用域
这里强调的是,如果一个全局变量只有类里面的少量方法用到了,那么就应该把这个全局变量缩小到局部变量,或者把这几个方法再抽成一个小类。
我自己本身更支持第二种做法,如果一个类中只有一些方法,而没有成员变量,那其实就是面向过程了。并且这种做法会导致方法的参数不断增多。
网友评论