关于Switch语句几种有意思的写法

时间: 2012-02-13 / 分类: FLASH/FLEX / 浏览次数: / 2个评论 发表评论

今天在一兄弟的代码中发现一个有意思函数:

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;
	}
}

2个评论

  1. cordyceps
    2012/02/22 于 12:19:11

    仔细想想,确实是实现了一样的功能。不过还是if else好理解呀

  2. jcrazy
    2012/02/17 于 10:44:16

    这样的写法我也干过,忘了为什么这样写,似乎很有原因。

    当需要判断多个表达式,而不仅仅是判断一个表达式的值的时候,和ifelse的功能是一样的。

发表评论

您的昵称 *

您的邮箱 *

您的网站

naruto shippuden 51wordpress