程序员,来说说你喜不喜欢使用switch/case语句?
Python实战社群
Java实战社群
长按识别下方二维码,按需求添加
扫码关注添加客服
进Python社群▲
扫码关注添加客服
进Java社群▲
Python实战社群
Java实战社群
长按识别下方二维码,按需求添加
扫码关注添加客服
进Python社群▲
扫码关注添加客服
进Java社群▲
作者丨李肖遥
ID丨技术让梦想更伟大
最近犯了个低级错误,请允许我水一篇,涨涨记性!
下面这个程序有啥问题?
//打印出对应的i
void test(int i)
{
switch(i)
{
case 1:
printf("data is %d\n",i);
break;
case 2:
printf("data is %d\n",i);
//break;
case 3:
printf("data is %d\n",i);
break;
default:
break;
}
}
不说你也懂的,在case 2下面没有break,这与我们设计的初衷是不符的,那么switch有哪些缺乏呢,我们来总结一下
switch 的缺点
语法正确,但是逻辑错误
写程序的时候忘记写break实在是再普通不过了,尤其是分类比较多的时候,因为从语法角度来说是正确的,所以比较容易忽视,可是代码的处理逻辑却是错误的!
死板的语法
switch对判断条件很严苛,case后面只能跟常量,其中的“表达式”的结果以及case后的“取值”只能是4种类型:byte、short、int和char,有些语言甚至只能用int类型作为判断条件,这种限制实在是太麻烦了。
需要子函数来处理分支
为了防止漏写break,因此建议把分支处理方法独立成一个子函数来处理,这样的代码就会减少忘记写break带来的bug。
switch 的优点
在很久以前,计算机科学家为了提高计算机的处理速度,把一些需要做逻辑判断的操作给固定死,然后只要查表就能做出相应的反应了。
比如说i=0的判断,switch在编译阶段将子函数的地址和判断条件绑定了,只要直接将a的直接映射到子函数地址去执行就可以了。
注意事项
要注意的一些情况:
switch的break语句是可选的,即没有break,程序会继续执行后面的代码。
default语句也是可选的,相当于对应if-else语句最后的else。
switch语句的比较是从上往下,所以把匹配概率大的选择因子放在前面可以提高效率。
选择因子(case后面的数据)具有唯一性,即不能有2个相同的因子存在。
default语句不论放在哪个地方,它都是在没有匹配的情况下才会去执行,也就是说case无论在什么情况下都会比default先执行
近期精彩内容推荐: