如果条件语句极其复杂,就应该将条件语句拆解开,然后逐个检查,并在条件为真时立刻从函数中返回,这样的单独检查通常被称之为“卫语句”(guard clauses)
《重构---改善既有代码的设计》
在阿里巴巴 Java 规范里也写到 “多层条件语句建议使用卫语句、策略模式、状态模式等方式重构。”
那么到底什么是卫语句
是否遇到(敲)过这样的代码,就像下面这种 “横放着的金字塔”:
if(true){
if(true){
if(true){
if(true){
if(true){
if(true){
}
}
}
}
}
}
实战演示一下吧
如题 : 从一百万里面找到所有能同时被 3 5 7 9 11 整除的数字
那么我们会不会这样写,举个小栗子,相信你遇到过
/**
* 从一百万里面找到所有能同时被 3 5 7 9 11 整除的数字
*/
for (int i = 0; i < 10000; i++) {
if (i%3==0){
if (i%5==0){
if (i%7==0){
if (i%9==0){
if (i%11==0){
System.out.println(i);
}
}
}
}
}
}
那么卫语句改写后就是,如下
发现没有,这样写会优雅很多,无论在阅读还是运行上都是上上选
/**
* 从一百万里面找到所有能同时被 3 5 7 9 11 整除的数字
*/
for (int i = 0; i < 10000; i++) {
if (i%3!=0){
continue;
}
if (i%5!=0){
continue;
}
if (i%7!=0){
continue;
}
if (i%9!=0){
continue;
}
if (i%11==0){
System.out.println(i);
}
}