需求背景:
按照人的年纪计算票价。
- 如果一个人不到10岁,不要钱
- 如果这个人超过10岁,但是不到18岁,5元
- 如果超过18岁。10元。
参考代码如下:
public int getPrice(int age) {
if (age <= 10) {
return 0;
}
if (age > 10 && age <= 18) {
return 5;
}
return 10;
}
这段代码的逻辑是完全正确的。但是不推荐这样写代码。
先从计算机性能去考虑整件事,如果这个人超过了18岁,那么计算机会先做
- age <= 10
- age > 10
- age <= 18
然后才返回10。
正确代码如下:
public int getPrice(int age) {
if (age <= 10) {
return 0;
} else if (age <= 18) {
return 5;
} else {
return 10;
}
}
这样计算机比较结果如下。- age <= 10
- age <= 18
其实比较性能并不是我想去做表达的。两段代码给我的感觉是,第二段代码是说根据年龄不同做不一样的处理。
但是第一段代码的两个 if 并没有任何关系。我是看到判断的内容以后才知道他也是去根据年龄去做判断的。如果逻辑更加复杂的话,很难再脑子中判断是否所有的情况都考虑清楚了。
所以在开发过程中,重要的是把问题规划清楚,然后尽量用if else 去描述问题。而不是根据需求去把所有的if 罗列出来。那样思考的过程会很难,也难免出错。