手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜Qcloud , 注册 | 登陆

如何避免switch-case组合

首页 > Javascript >

这是cssrain站长翻译的一篇文章,事实上,在PHP中,已经不太建议使用switch-case了。
特别是在面向OO的代码中,你几乎也看不到这样的代码出现

不是说这个方式不好。而是,它的可扩展性不强。所以在大多数情况下,都放弃采用这种方式。

以下是翻译内容,来源于:http://www.cssrain.cn/article.asp?id=1384

我很年轻,还没有做过很长的编程。所以我对使用switch-case 语法没有什么很深刻的印象,至少在我的记忆中是这样。或许你认为这是一件坏事情。你甚至会怀疑我为什么不使用它们。我真的不知道为什么,似乎我天生就不喜欢使用它,如下所示:

JavaScript代码
  1. switch (something) {  
  2.   case 1:  
  3.     doX();  
  4.   break;  
  5.   case 2:  
  6.     doY();  
  7.   break;  
  8.   case 3:  
  9.     doN();  
  10.   break;  
  11.   // And so on...  
  12. }  

显然,虚构此代码的作者不够了解使用其他JavaScript方法来构建此功能。其实有很多种方式更适合这种情况,而不是一个丑陋的switch. 有许多许多更轻松,更优雅的方式来实现这种功能。
switch-case组合肯定是非常有用的,当你有一个变量并且依靠它的值的不同来做不同的事情。使用多个if-else不太恰当,所以人们通常使用switch-case来代替多个if-else.我敢肯定你也是.
上面的例子依赖于 something 判断 ,然后根据条件运行doX , doY或doN 。在JavaScript中,同样的逻辑可以表示一个简单的查找表的形式————对象,如下所示:

JavaScript代码
  1. var cases = {  
  2.    1: doX,  
  3.    2: doY,  
  4.    3: doN  
  5. };  
  6. if (cases[something]) {  
  7.    cases[something]();  
  8. }  

这不仅简洁,而且也可以重复使用和修改条件。所有条件都是对象的一部分,因此,如果您需要改变某些条件那就非常简单了。

所以,我想说的是:请不要使用switch-case,除非绝对必要的。 为什么? 因为有更好的替代品,比它更简单!

关于“ switch-case”的语法,请浏览:http://en.wikipedia.org/wiki/Switch_statement

如果想阅读原文,请点击这里:http://james.padolsey.com/javascript/how-to-avoid-switch-case-syndrome/
提示:译文跟原文有出入,请看原文。




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: javascript

« 上一篇 | 下一篇 »

只显示10条记录相关文章

[转载]超强大的jquery formValidator (浏览: 39866, 评论: 3)
jQuery插件---获取URL参数 (浏览: 35483, 评论: 1)
通过JS更改FORM的action (浏览: 25927, 评论: 1)
JQuery学习第一天 (浏览: 22930, 评论: 3)
JS美化软件 (浏览: 22660, 评论: 4)
如何调试JS错误 (浏览: 20315, 评论: 0)
jQuery Plugins -- JQzoom (浏览: 19382, 评论: 3)
利用PHP裁剪图片 (浏览: 19137, 评论: 4)
Minify的简单介绍 (浏览: 18785, 评论: 0)
JavaScript---Web流程定义工具 (浏览: 18123, 评论: 0)

2条记录访客评论

因为,在switch-case中,不能直接Return,而if else组合是可以的。
你说的区间范围使用switch-case的,是属于一个特例啦。纯字符串的或者纯数值的情况在处理的时候会比较多见。

那句:请不要使用switch-case的,也是原文内容啦。。。呵呵。
我是永远认为,应该在合适的地方使用合适的代码。

Post by gouki on 2009, July 15, 2:19 PM 引用此文发表评论 #1

switch-case如果涉及到范围,如:
switch(i){
  case i < 0:
    alert('<0');break;
  case i = 0:
    alert('=0');break;
  case i > 0;
    alert('>0');break;
  default:
    alert('undefine');break;
}
你那种方法就不能用了。
另外这种方法效率比if-elseif-else要高。
“请不要使用switch-case,除非绝对必要的。”说得有点过了。

Post by 大笨 on 2009, July 15, 8:46 AM 引用此文发表评论 #2


发表评论

评论内容 (必填):