为了账号安全,请及时绑定邮箱和手机立即绑定

为什么要切换/删除而不是If / Else If?

为什么要切换/删除而不是If / Else If?

C
智慧大石 2019-11-29 11:06:02
这个问题主要针对C / C ++,但我想其他语言也很重要。我不明白为什么仍然使用switch / case而不是if / else if。在我看来,这很像使用goto的方法,并且会产生相同的混乱代码,而if / else if可以以更有条理的方式实现相同的结果。不过,我经常看到这些障碍。找到它们的常见地方是在消息循环(WndProc ...)附近,而这些地方却是它们引起最严重破坏的地方:变量在整个块中共享,即使不适当(也不能内部初始化)。必须特别注意不要掉线,等等。就个人而言,我避免使用它们,并且我想知道我是否还缺少一些东西?它们是否比if / else更有效率?它们是按照传统进行的吗?
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

好吧,原因之一就是清晰度。


如果您有开关/盒,则表达式无法更改....即


switch (foo[bar][baz]) {

case 'a':

    ...

    break;

case 'b': 

    ...

    break;

}

而如果使用if / else,则如果您写错(或意图):


if (foo[bar][baz] == 'a') {

    ....

}

else if (foo[bar][baz+1] == 'b') {

    ....

}

人们在阅读您的代码时会怀疑“ foo表达式应该是相同的”还是“为什么它们不同”?


查看完整回答
反对 回复 2019-11-29
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

还请记住,switch语句允许控制流继续进行,这允许您很好地组合条件,同时允许您为某些条件添加其他代码,例如以下代码:


switch (dayOfWeek)

{

    case MONDAY:

        garfieldUnhappy = true;

    case TUESDAY:

    case WEDNESDAY:

    case THURSDAY:

    case FRIDAY:

       weekDay = true;

       break;

    case SATURDAY:

       weekendJustStarted = true;

    case SUNDAY:

       weekendDay = true;

       break;

}

if/else相反,在这里使用语句并不是那么好。


if (dayOfWeek == MONDAY)

{

    garfieldUnhappy = true;

}

if (dayOfWeek == SATURDAY)

{

    weekendJustStarted = true;

}

if (dayOfWeek == MONDAY || dayOfWeek == TUESDAY || dayOfWeek == WEDNESDAY

    || dayOfWeek == THURSDAY || dayOfWeek == FRIDAY)

{

    weekDay = true;

}

else if (dayOfWeek == SATURDAY || dayOfWeek == SUNDAY)

{

    weekendDay = true;

}


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 398 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信