难道是荒谬使用switch语句来处理IRC服务器的代码?
-
20-08-2019 - |
题
有相当几的IRC服务器代码
我工作的一个小 IRC客户端,Adobe AIR的和我开始通过支持只有少数这些最初,然后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语句,其长度的缘故。
解决方案
你为什么不保持一个哈希(一个JavaScript {}
对象)的代码为键和功能的价值?然后,对于小件的代码,你可以使用匿名函数,并为更大的代码块,你可以只需要一个已经写函数的引用。我不知道什么IRC,但这里有一个小例子:
var CodeHash = {
001: function() { /* Do something... */ },
002: BigImportantObject.someFunction
}
一个坏榜样的那种,而是你的想法。
修改:如果你认为你可以很容易,没有问题保持这么长的switch
语句,那么我认为这是荒谬的重写你的程序,而只需删除switch
。但我知道,我个人更愿意保持一个哈希表像上面不是一个巨大的switch
声明,原因是多方面的。所以,这取决于你。似乎是一个反问,如果你继续坚持,你会重写代码的唯一原因是为了摆脱switch
声明。
其他提示
为什么不保持与预定义的出口点的参数文件中的开关,其参数一起 在启动时读取该文件,并保持在存储器