首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >优化大开关语句- AS3

优化大开关语句- AS3
EN

Stack Overflow用户
提问于 2014-03-26 08:41:09
回答 2查看 81关注 0票数 0

我有一个非常大的开关语句,它处理来自服务器的套接字消息。它目前有100多个病例,并将继续增长。我觉得我应该做一些比开关语句更优化的事情。

我的想法是:拥有大量的函数回调。然后我就可以做一些简单的事情

代码语言:javascript
运行
复制
myArrayOfCallbacks[switchValue](parameters);

这应该会把O(n)的东西,其中n是开关的数目,变成恒定的时间,对吗?我认为这将是一个很好的优化。

对另一种方法有什么意见或建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-26 08:57:02

因为要对一个值调用一个开关大小写,所以最好将可能的值安排为一个可能值的静态数组,然后调用另一个相应函数的静态数组。那你就像这样:

代码语言:javascript
运行
复制
public static const possibleValues:Array=['one value','two value',...];
// in case of ints, use only the second array
public static const callbacks:Array=[oneFunction,twoFunction,...];
// make sure functions are uniform on parameters! You can use 1 parameter "message" as is
...
var swtichValue=message.type; // "message" is an Object representing the message
// with all its contents
var callbackIndex:int=possibleValues.indexOf(switchValue);
if (callbackIndex>=0) if (callbacks[callbackIndex]) callbacks[callbackIndex](message);

所以是的,你猜得很对。

票数 1
EN

Stack Overflow用户

发布于 2014-03-26 17:00:19

我会与客户意识到,伴随后端。这样你就可以不用收藏了。

代码语言:javascript
运行
复制
if (eventType in responseController) {
    //Before call, you could do secure checks, fallbacks, logging, etc.
    responseController[eventType](data);
}

//Where eventType is 'method' name, 
//for example command from the socket server is 'auth',
//if you have implemented method `auth` in your responseController
//it will be called
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22655461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档