1

有不少IRC服务器代码

我正在为 Adob​​e AIR 开发一个小型 IRC 客户端,我一开始只支持其中的几个,然后一个 switch 语句似乎不是一个坏主意。但是随着我越来越支持,switch语句越来越长,感觉有点失控了。一个问题是我将低级 IRC 处理代码单独保存在一个文件中,以便可以重复使用。我想将所有内容保存在一个文件中。另一个问题是 switch 语句中的代码块目前假定是这个 IRC 类的一部分,并且经常使用这个语句。现在进行更改将需要大量工作并引入回归。唯一的问题是我不喜欢长的 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 语句而付出努力是否值得,因为它的长度。

4

2 回答 2

3

为什么不保留一个散列(一个 JavaScript{}对象),其中代码作为键,函数作为值?然后,对于小段代码,您可以使用匿名函数,而对于较大段代码,您可以只引用已经编写的函数。我对IRC一无所知,但这里有一个小例子:

var CodeHash = {
    001: function() { /* Do something... */ },
    002: BigImportantObject.someFunction
}

有点不好的例子,但你明白了。


编辑:如果你相信你可以switch轻松地维护这么长的语句并且没有问题,那么我认为重写你的程序只是为了删除switch. switch但我知道,出于多种原因,我个人更愿意维护一个像上面这样的哈希表而不是一个巨大的语句。所以这取决于你。如果您一直坚持重写代码的唯一原因是摆脱该switch语句,这似乎是一个反问。

于 2009-06-27T07:23:31.340 回答
1

为什么不将开关保存在具有预定义退出点及其参数的参数文件中,在启动时读取文件并保存在内存中

于 2009-06-27T07:16:51.900 回答