卫语句就是把复杂的条件表达式拆分成多个条件表达式,减少嵌套。比如一个很复杂的表达式,嵌套了好几层的if - then-else语句,转换为多个if语句,实现它的逻辑,这多条的if语句就是卫语句。
有时候条件式可能出现在嵌套n次才能真正执行,其他分支只是简单报错返回的情况,对于这种情况,应该单独检查报错返回的分支,当条件为真时立即返回,这样的单独检查就是卫语句(guard clauses)。卫语句可以把我们的视线从异常处理中解放出来,集中精力到正常处理的代码中。
目的:减少嵌套,保持代码逻辑清晰,提高可读性
一些示例:
示例1:
public void function() {
if(IsWorkDay()) { //boolean
Sysetm.out.println("Error,is work day");
} else {
if(IsWorkTime()) { //boolean
Sysetm.out.println("Error ,is work time");
} else {
... //执行内容
}
}
}
修改为卫语句后:
public void function(){
if(IsWorkDay()) {
Sysetm.out.println("Error,is work day");
return;
}
if(IsWorkTime()) {
Sysetm.out.println("Error ,is work time");
return;
}
...//执行内容
}
示例2:
//这是一个type类型
private int type = 0;
/**
*此方法根据type类型的不同处理不同的业务(此处作为测试代码简单带过)
*但是每次处理完业务后需在else语句做一个其他业务的处理
*/
public void getType() {
if (type == 0) {
} else {
if (type == 1) {
} else {
if (type == 2) {
} else {
//若在此处在次判断type的值,这个嵌套会更加进行
setType();
}
}
}
}
修改后
public void getTypeNew() {
/**
*当type的值满足条件后,直接return掉,将这个方法终止。不再继续进行了。
*若所有条件均不满足,则执行setType();这个最终else的业务处理
*/
if (type == 0) {
return;
}
if (type == 1) {
return;
}
if (type == 2) {
return;
}
setType();
}
参考文章:
https://blog.csdn.net/Soumns_Kris/article/details/78390492
https://blog.csdn.net/KingBoyWorld/article/details/72331420
https://blog.csdn.net/a910626/article/details/52160051