Switch语句:我知道他们在做什么 - 根据惯例,我常常使用它们很多次,当我想根据Enum的值做不同的事情时,但现在它只是打我:为什么我们要使用它?它最初的目的是什么?我的意思是,这样的:switch语句是什么?
switch(myVar) {
case Foo:
doSomething();
break;
case Bar:
doSomethingElse();
break;
default:
justAnotherThing();
break;
}
具有完全相同的行为:
if(myVar == Foo) {
doSomething()
}else if(myVar == Bar) {
doSomethingElse();
}else {
justAnotherThing();
}
加if
的让你做不平等的比较(>
,<
,!=
),如果你需要它。我可能会发现一个开关更有用的唯一情况是当你不使用内部的break
声明时:但这种情况不会太频繁,我发现代码质量很糟糕。
我真的找不到使用switch
而非if
的任何好处......那么为什么要定义它?
现在做相同的'if-else if'链有十个选择,或二十,你会发现它不是很可读。另外,编译器可能能够将'switch'优化成简单的跳转表,而不必评估每个条件直到找到“匹配”。并且请记住,如果没有“break”,那么在类C语言中(您似乎将其用作基础)的情况*会通过*到达下一个“case”。这在if-else if链中很难做到。 –
至于阅读能力,我认为他们几乎是平等的 - 只要你保持一致的身份,并且你使用'switch'的情况下使用if-else if',否则if (myVar =='总是占用相同的空间将使所有可能的值对齐并且易于阅读 – olivarra1
而在我的问题中,我通过删除'break'来提及fall-through行为,但这对可读性来说很糟糕:所以你有可能会或可能不会跳到下一个案件的案件,以及改变案件的顺序都会影响行为,我只是用这个“把戏”来比较或者比较一个开关,并试图避免出现其他情况。 – olivarra1