我正在开发一个小IRC client for Adobe AIR,我最初只支持其中的一些,然后转换语句似乎不是一个坏主意。但随着我越来越多的支持,switch语句变得越来越长,感觉它有点失控。一个问题是我将低级IRC处理代码保存在一个文件中,以便可以重用它。我想将所有内容保存在一个文件中。另一个问题是switch语句中的代码块当前假设是此IRC类的一部分,并且经常使用此语句。现在进行更改将需要做很多工作并引入回归。唯一的问题实际上是我对长开关语句的厌恶,否则你知道它有效,而且它很容易阅读,但实际上并没有让它更难维护。但这是一个如此长的转换声明。并且包含switch语句的函数显然也很长。 ://
我有时会做一件代替开关的事情是我定义了以switch评估的值命名的函数。而不是开关:
switch ( val ) {
case: "alert":
alert( "yo" );
break;
}
我检查范围内是否存在方法并执行它:
obj.alert = function ( ) {
alert( "yo" );
}
if ( val in obj && isFunction( obj[ val ] ) ) {
obj[ val ]( );
}
但是在这种情况下,我觉得回归的风险很高,而且我不确定为了它的长度而只能避免使用长切换语句。
答案 0 :(得分:3)
为什么不保留哈希(一个JavaScript {}
对象),代码作为键,函数作为值?然后,对于小块代码,您可以使用匿名函数,对于更大的代码片段,您可以只引用已编写的函数。我对IRC一无所知,但这是一个小例子:
var CodeHash = {
001: function() { /* Do something... */ },
002: BigImportantObject.someFunction
}
有点不好的例子,但你明白了。
编辑:如果您认为可以轻松且毫无问题地保留这么长的switch
声明,那么我认为重写您的程序只是为了删除{{1}这是荒谬的}。但我个人认为,出于多种原因,我个人更愿意维护上面的哈希表,而不是一个巨大的switch
语句。所以这取决于你。如果你坚持认为你重写代码的唯一原因就是摆脱switch
陈述,这似乎是一个修辞问题。
答案 1 :(得分:1)
为什么不将开关保留在带有预定义退出点及其参数的参数文件中 在启动时读取文件并保留在内存中