关于Switch语句几种有意思的写法
今天在一兄弟的代码中发现一个有意思函数:
private function checkError(errorCode : Number) : Void {
switch (true) {
case (0 == errorCode):
//To do something here.
break;
case (-1 == errorCode):
//To do something here.
break;
case (-2 == errorCode):
//To do something here.
break;
case (-3 == errorCode):
//To do something here.
break;
}
}
猛一看,这代码有点像绕口令,这哥们思维方式和正常人是反的。实际上这样写从语法上讲是没有问题的,按照语法说明:
switch (expression){
caseClause:
[defaultClause:]
}
无论是switch后的语句,还是case后面的语句都可以使用表达式。
按照正常人的思维,这代码肯定是这样写:
private function checkError(errorCode : Number) : Void {
switch (errorCode):{
case 0:
//To do something here.
break;
case -1:
//To do something here.
break;
case -2:
//To do something here.
break;
case -3:
//To do something here.
break;
}
}
这样看代码清晰多,这样看来,似乎上面的那种写法并没有什么可取之处,既不能提高代码效率,也不能简代码逻辑。
但仔细思考一下,其实在某些情况下,这种逆向思维的方式是可以达到简化代码的结构的。比如如下这样的代码:
private function checkError() : Void {
if(a=="-1"){
//To do something here.
}else if(b=="-1"){
//To do something here.
}else if(c=="-1"){
//To do something here.
}else if(d=="-1"){
//To do something here.
}
}
可以改成如下的形式,从条理上讲更清晰:
private function checkError() : Void {
switch ("-1"):{
case a:
//To do something here.
break;
case b:
//To do something here.
break;
case c:
//To do something here.
break;
case d:
//To do something here.
break;
}
}
上一篇: 有人忙得冒烟,有人闲得尿血
下一篇: HTML5本地存储不完全指南
2012/02/22 于 12:19:11
仔细想想,确实是实现了一样的功能。不过还是if else好理解呀
2012/02/17 于 10:44:16
这样的写法我也干过,忘了为什么这样写,似乎很有原因。
当需要判断多个表达式,而不仅仅是判断一个表达式的值的时候,和ifelse的功能是一样的。