2010-07-02 23 views
2

我不确定我了解if块和switch/select块之间的区别。 我的意思是我一直都在使用它们。但是我不清楚什么时候应该使用开关块,什么时候不使用。因为,选择块可以扩展为块。 所以我认为使用select块的唯一真正优势是人类的可读性。编程101,选择VS如果块

回答

4

答案会因语言而异。例如,在C和C++中,编译器可以将switch(select)语句变成相当高效的跳转表,部分原因是它们比语句条件更具限制性。 (虽然公平,但现代编译器在优化各种各样的东西方面相当不错)。这可能不适用于所有语言/编译器(我似乎记得VB6基本上将Select Case视为一系列If/ElseIf语句。)

可读性绝对是一个因素:在VB中使用switch(或Select Case)告诉任何跟随你的人以下的所有分支在共同条件下分支,这非常有用。

可维护性(与可读性有关,但不同于可读性)也是一个因素。如果你改变了switch上分支的一件事,你就完成了;如果您有很长的一系列if报表,则很容易错过一个(或多个)报表。

+0

9秒...我必须是一个慢打字员或什么..;) – falstro 2010-07-02 07:10:23

+1

@roe:大声笑!是的,妈妈在高中给了我很好的建议(“打字”)...... – 2010-07-02 07:12:39

0

根据我认为的语言,但我们假设您正在谈论C.在C中,切换块将转换为跳转表,因此您将根据该值直接跳转到您的部分想要执行,而if块可以进行任意比较,并且必须将其与每个可能的值进行比较以找到要执行的分支。

请注意,交换机只能使用设置值(跳转表在编译时创建),而if块可以执行小于/大于比较或与变量进行比较。

0

如果你想比较多个项目,你会想要使用一个if块。你可以使用if/elseif/else。如果你想对一个变量的值做出反应,你可以使用开关/选择块。

if (today is monday) { 
    it is moday. 
} else if (today is tuesday and it is 8:00pm) { 
    it was not monday but it is tuesday and it is 8:00pm. 
} else { 
    it must be sunday. 
} 

switch (day) { 
    case: Monday 
      it is monday 

    case: Tuesday 
      it is tuesday 
} 
2

开关组相当多的要求如下:

  • 你只有一个标准进行调查,或若干准则是不依赖对方
  • 你有几个(即超过2或3)预定义的分支
  • 你要搜索的平等,比如
  • “天== Days.Monday”

如果你想同时检查多个依赖标准,如果你只有一个分支(或者两个小分支),或者你想搜索不等式(例如“time> 8.00”),if声明是要走的路。

可以说,我的列表中的第一点可以用各种“漂亮”的技术绕开,但以我的经验来说,这只不过是相当复杂且难以阅读的代码 - 和T.J.声明,可读性是编写可维护代码时的一个因素。

2

所以我认为使用select块的唯一真正好处是人的可读性。

不要低估这一点。 在编程时,人的可读性应该是缺省的第一关注点