建议25:恰当选用if和switch
switch结构中存在很多限制,存在这些限制的主要目的是提高多重分支结构的执行效率。因此,如果能够使用switch结构,就不要选择if结构。
无论是使用if结构,还是使用switch结构,应该确保下面3个目标的基本实现:
准确表现事物内在的、固有的逻辑关系。不能为了结构而破坏事物的逻辑关系。
优化逻辑的执行效率。执行效率是程序设计的重要目标,不能为了省事而随意耗费资源。
简化代码的结构层次,使代码更方便阅读。
相对来说,下面几种情况更适合使用switch结构:
枚举表达式的值。这种枚举是可以期望的、平行逻辑关系的。
表达式的值具有离散性,不具有线性的非连续的区间值。
表达式的值是固定的,不是动态变化的。
表达式的值是有限的,而不是无限的,一般情况下表达式应该比较少。
表达式的值一般为整数、字符串等类型的数据。
而if结构则更适合下面的一些情况:
具有复杂的逻辑关系。
表达式的值具有线性特征,如对连续的区间值进行判断。
表达式的值是动态的。
测试任意类型的数据。
例如,针对学生分数进行不同的判断,如果分数小于60,则评定为不及格;如果分数在60~75(不包含75)之间,则评定为合格;如果分数在75~85(不包含85)之间,则评定为良好;如果分数在85~100之间,则评定为优秀。针对这种情况,表达式的值是连续的线性判断,显然使用if结构会更合适一些。
- if(score < 60){
- alert("不及格");
- }
- else if(60 <= score < 75){
- alert("合格");
- }
- else if(75 <= score < 85){
- alert("良好");
- }
- else if(85 <= score <= 100){
- alert("优秀");
- }
如果使用switch结构,则需要枚举100种可能,如果分数值还包括小数,情况就更加复杂了,此时使用switch结构就不是明智之举。但是,对于有限制的枚举数据,比如性别,使用switch结构会更高效,例如: - switch(sex){
- case "女":
- alert("女士");
- break;
- case "男":
- alert("先生");
- break;
- default:
- alert("请选择性别");
- }