使用switch语句处理irc服务器代码会不会很荒谬?

时间:2009-06-27 07:09:02

标签: javascript air switch-statement irc

有相当a few of IRC server codes

我正在开发一个小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 ]( );
}

但是在这种情况下,我觉得回归的风险很高,而且我不确定为了它的长度而只能避免使用长切换语句。

2 个答案:

答案 0 :(得分:3)

为什么不保留哈希(一个JavaScript {}对象),代码作为键,函数作为值?然后,对于小块代码,您可以使用匿名函数,对于更大的代码片段,您可以只引用已编写的函数。我对IRC一无所知,但这是一个小例子:

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

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


编辑:如果您认为可以轻松且毫无问题地保留这么长的switch声明,那么我认为重写您的程序只是为了删除{{1}这是荒谬的}。但我个人认为,出于多种原因,我个人更愿意维护上面的哈希表,而不是一个巨大的switch语句。所以这取决于你。如果你坚持认为你重写代码的唯一原因就是摆脱switch陈述,这似乎是一个修辞问题。

答案 1 :(得分:1)

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