我正在做一个小的 IRC client for Adobe AIR ,我一开始只支持其中的几个,然后 switch 语句似乎不是个坏主意。但是随着我支持的越来越多,switch语句越来越长,感觉有点不受控制了。一个问题是我将低级 IRC 处理代码单独保存在一个文件中,以便可以重复使用。我想将所有内容保存在一个文件中。另一个问题是 switch 语句中的代码块目前假定是此 IRC 类的一部分,并且经常使用 this 语句。现在进行更改将需要大量工作并引入回归。唯一的问题确实是我不喜欢长的 switch 语句,否则你知道它是有效的,而且它很容易阅读,但并没有真正让它更难维护。但这是一个很长的 switch 语句。而包含 switch 语句的函数显然也很长。 ://
我有时代替开关做的一件事是定义以开关评估的值命名的函数。而不是开关:
switch ( val ) {
case: "alert":
alert( "yo" );
break;
}
我检查范围内是否存在一个方法并执行它:
obj.alert = function ( ) {
alert( "yo" );
}
if ( val in obj && isFunction( obj[ val ] ) ) {
obj[ val ]( );
}
但在这种情况下,我又一次觉得回归的风险很高,而且我不确定为了它的长度而避免使用长的 switch 语句是否值得。
最佳答案
为什么不保留一个散列(JavaScript {}
对象),其中代码作为键,函数作为值?然后,对于小段代码,您可以使用匿名函数,而对于大段代码,您可以只引用一个已编写的函数。我对 IRC 一无所知,但这里有一个小例子:
var CodeHash = {
001: function() { /* Do something... */ },
002: BigImportantObject.someFunction
}
有点糟糕的例子,但你明白了。
编辑:如果您相信您可以轻松且毫无问题地维护这么长的 switch
语句,那么我认为重写您的程序只是为了删除 切换
。但我知道,就我个人而言,出于多种原因,我更愿意维护一个像上面那样的哈希表,而不是一个巨大的 switch
语句。所以这取决于你。如果您坚持认为重写代码的唯一原因是摆脱 switch
语句,这似乎是一个反问。
关于javascript - 使用 switch 语句来处理 irc 服务器代码会很荒谬吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1052274/