首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对于Android事件,为什么switch语句比if-else链更常见?

对于Android事件,为什么switch语句比if-else链更常见?
EN

Stack Overflow用户
提问于 2011-01-21 16:35:31
回答 5查看 2.2K关注 0票数 6

当为Android开发时,开关语句是否比if-else链更有效?一个开关语句需要更多的代码行,但看看传闻证据似乎是Android应用程序中最常用的。

下面的示例用case语句和if-else链来说明相同的编程结构。开关语句需要10行,而if- lines链需要7行。

Case语句

代码语言:javascript
复制
public void onClickWithSwitch(View v) {
   switch(v.getId()) {
       case R.id.buttonA:
           buttonA();
           break;
       case R.id.buttonB:
           buttonB();
           break;
       case R.id.buttonC:
           buttonC();
   }
}

If-If链

代码语言:javascript
复制
public void onClickWithIf(View v) {
   int id = v.getId();
   if(id == R.id.buttonA)
       buttonA();
   else if (id == R.id.buttonB)
       buttonB();
   else if (id == R.id.buttonC)
       buttonC();
}

为什么开关比如果-否则链更常见?开关语句是否提供了更好的性能时,如果-否则链?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-21 18:39:50

语言之所以有switch语句是为了允许编译器生成一个跳转表,如果它很大,它就会很快,因为在运行时,它可以在O(1)而不是O(N)时间到达所需的代码。

只有在有很多情况下,并且在每种情况下要执行的代码都不需要花费太多时间,并且程序在这段代码中花费了很大的时间的情况下,这才是有帮助的。

除此之外,这纯粹是品味的问题。

代码行数与速度之间没有关系。重要的是生成的汇编语言代码,我鼓励您熟悉这些代码。

票数 9
EN

Stack Overflow用户

发布于 2011-01-21 16:38:27

除非你的假设/案例真的很多,否则我不认为这有什么关系。使用开关语句,可以更清楚地了解发生了什么。唯一的缺点是所有的break语句都有遗漏的可能,但是静态分析器应该能捕捉到这一点。

最好是按id键的映射,或者巧妙地使用子类。

票数 5
EN

Stack Overflow用户

发布于 2011-01-21 17:02:28

“更有效”是一个模糊的概念,因为衡量它的方法太多了。我想大多数人都会想到执行时间。另一方面,大多数人没有想到记忆的效率。具有广泛间隔的测试值的switch语句可能会占用很大的内存,除非编译器足够聪明地将其重新解释为if-else链。

对于编程效率,包括维护和可读性,还有很多要说的话。正如sblundy所指出的,一个开关语句可以更清楚地说明程序员的意图,而不是一个if-else链。注释可以平衡这一点,但是这需要程序员做更多的工作,而且注释和代码不匹配的风险也存在(特别是在几个维护周期之后)。

我想,大多数人都会随心所欲地学习(或被告知要遵循),而不去想太多。在剩下的时间里,我认为大多数关于开关和如果-否则的决定都是基于在生成代码的时候哪一个最符合程序员的想法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4761284

复制
相关文章

相似问题

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