前边介绍了C和C++的if条件判断。普通的条件判断,使用if-else 就能够完成。如果可能的条件太多,那你需要在代码中写下一大段的 if-else if-else if ....else.
如果我一气呵成,还好,基本逻辑不太会有问题。如果中途被人打断了,嗯,我需要重新再想,刚刚写到第几个判断了?
接下来,需求变了一下,产品经理、客户说,你加一个新的判断,这种情况下和之前的第N种情况一样,都执行**操作。好吧,**操作需要的代码有只有一句,嗯,我可以加个 els if就行。"✔"
真的吗?**操作需要10行代码,本来 if-else...就有100行了,再加10行。慢慢的,需求变更多了,每次加10行,不久之后我的代码就没法看了。
嗯, if 支持多条件的,我用 "||" 把多个条件连接起来就行。而且我还充分利用了短路求值的特性,将出现几率大的放在前边。试想,在100行的文件中,满足条件A 和A1的内容需要调用 f 函数。满足A的几率是8%,满足A1的记录是20%,那我把 A1的判断放在A 之前
1 if (A || A1) 2 .... 3 4 if (A1 || A) 5 ...
在这种几率下,第二种写法比第一种快很多。嗯,不错,充分利用语言特性了。
如果分支太多,出错的几率会增大。那我可能需要改进代码了,不再使用if-else这种情况来实现条件判断了。
大部分程序语言都支持 switch 作为条件判断。
1 switch(x) 2 { 3 case 1: 4 ......; 5 break; 6 case 2: 7 .......; 8 break; 9 default:
以上是C语言的 switch 条件语句。当出现文章开头的情况,比如1和11,使用同样的逻辑来处理。我们的代码如下:
1 switch(x) 2 { 3 case 1: 4 case 11: 5 ...; 6 break; 7 case 2: 8 ...; 9 break; 10 default:
这样出错的记录大大降低了。
我们注意到,每个case 条件都使用 break; 如果不加break, 程序会接下来执行下一个case 情况下的语句。
初学者一定要牢记,如果使用switch-case 条件判断,切记break。
利用这一特性,我们可以灵活处理一下情况:
1. 满足1的情况时,需要执行语句A,B,C
2. 满足2的情况时,需要执行语句B。
我们的代码可以这么写
1 switch(x) 2 { 3 case 1: 4 语句A; 5 语句C; 6 case 2: 7 语句B; 8 break; 9 10 ............................
当然,现代面向对象程序设计,设计模式的出现,大家都会避免使用 if-else 和 switch-case 了。
但毕竟,条件判断的两种基础方式还是需要掌握的。