概述
卫语句是一种写代码的经验
为了减少if else的层数
为了提高可读性,进而利于维护
案例
现在做一个需求,判断一个人是否满足招聘要求,招聘要求:30岁以下的中国男性 体重100kg以下 升高160cm以上 无犯罪历史
boolean check(int age, String country, String gender,
double weight, double height, boolean isCriminal) {
if (age <= 30) {
if ("中国".equals(country)) {
if ("男".equals(gender)) {
if (weight <= 100) {
if (height >= 160) {
if (!isCriminal) {
return true;
}
}
}
}
}
}
return false;
}
改进写法1
boolean check1(int age, String country, String gender,
double weight, double height, boolean isCriminal) {
if (age <= 30 && "中国".equals(country) && "男".equals(gender)
&& weight <= 100 && height >= 160 && !isCriminal) {
return true;
}
return false;
}
改进写法2
boolean check2(int age, String country, String gender,
double weight, double height, boolean isCriminal) {
if (age > 30) {
return false;
}
if (!"男".equals(gender)) {
return false;
}
if (weight > 100) {
return false;
}
if (height < 160) {
return false;
}
if (isCriminal) {
return false;
}
if (!"中国".equals(country)) {
return false;
}
return true;
}
改进写法1(check1)和改进写法2(check2)的代码块层数都是单层,哪个更好?
check1比check2的代码行数少,但“卫语句”建议check2,原因见“卫语句的特点”(其实check1也很好)
卫语句的特点
check2就是卫语句的写法
- 一个分支只判断一种情况(代码易读)
- 每个分支判断不满足条件的情况,并结束方法(如果分支判断满足条件的情况,则会产生多层嵌套,如check)
- 发生概率大分支往前放(例如check2中
if (!"中国".equals(country)) {return false;}
因为应聘者中外国人很少,所以国籍判断放最后,为了减少发生概率小的判断语句的执行次数)
总结
- 当if else嵌套参差过深(如上面的check方法)才考虑用卫语句
- 不要刻意用卫语句(上面的check1方法也很好)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)