我的OCD使我在编写case语句时添加“break”,即使它们不会被执行。请考虑以下代码示例:
switch(option) {
case 1:
a = 1;
b = 7;
break;
case 2:
a = 2;
b = 4;
return (-1);
break;
default:
a = -1;
break;
}
我的两个问题是:
对于“案例2:”,我真的不需要休息,但最好还是把它放在那里吗?
对于“默认:”。这纯粹是强迫症,还是有任何真正的理由在这里休息?
答案 0 :(得分:35)
你不需要休息,但拥有它们没有任何害处。在我看来,保持代码结构化是值得的,有一些无关紧要的陈述。
答案 1 :(得分:25)
我同意在最终的默认情况下休息,并且不同意退货后的休息时间。 (一位同事做了那些,它伤害了我的眼睛。)
我还缩进开关以减少缩进级别的扩散。即,即:
switch(option) {
case 1:
a = 1;
b = 7;
break;
case 2:
a = 2;
b = 4;
return -1;
default:
a = -1;
break;
}
(我也认为,由于return语句不是一个函数,因此强制执行一个多余的样式并使其看起来不合适。)
答案 2 :(得分:8)
默认情况下的休息只是个人偏好的问题。
回归后休息几乎与我相矛盾。我会删除休息,只是为了使返回语句真正脱颖而出。
答案 3 :(得分:2)
我会考虑在返回错误形式后中断,您将收到有关某些编译器无法访问的代码的警告。
默认情况下的中断是完全合适的,案例失败是一种工具,在使用时应特别标记。
答案 4 :(得分:2)
我更喜欢在每个 case 中都有一个中断,包括默认,并且避免在 switch 中完全返回。对于只有2-3个案例(包括默认值)的短交换机, return 是可以的,但仅当所有 case 以相同的方式执行时。 “毫无意义”的突破我觉得毫无意义,只能让它更多的代码来阅读。同样适用于只是做破坏的空缺省,完全没有意义。在我看来,阅读代码的难易程度更重要的是,如果有人碰巧改变了这个或那个,会发生什么。
答案 5 :(得分:1)
两次休息都没有为你做任何事,但也没有伤害。
就个人而言,如果我有回复,我通常会把它们排除在外 - 但如果可能的话,我也尽量避免在函数中有多个返回点。
但是,我确实认为default:
案例的中断是好的 - 原因之一是:如果你要将其删除,并且有人在默认情况下添加了一个新案例,那么如果他们的行为会有所不同“忘了”加入休息。
答案 6 :(得分:1)
正如其他人所指出的那样,在返回或在默认情况下休息时间主要是个人风格。
当我不必遵循任何特定的风格规则时,我更喜欢这样的事情:
switch(foo){ case 0: baz = 1; break; case 1: bar %= 2; return -1; /* NOTREACHED */ case 2: bar = -1; return -2; /* NOTREACHED */ break; default: break; }
在案例1和案例2之间,我倾向于选择2.尽管评论说NOTREACHED,但是当代码发生变化时,评论会无意中(当然是无意的)。我喜欢NOTREACHED评论,因为它可以满足你知道你在做什么的lint,并提醒你早点退出这个功能。如果返回被删除,那么在返回后放置休息的原因会减少错误。无论你是否陷入下一个案例,或者你退出交换机并继续像以前那样继续,你仍然会遭遇虚假行为。
当然,如果我可以避免它,我就不会从交换机体内的函数返回。
答案 7 :(得分:1)
我被告知在C,C ++,java和C#中,如果你没有把那些“中断”,程序代码流将落入其他“案例”并将执行其中的指令,无论是否变量没有赋值给“案例”。
答案 8 :(得分:1)
关于其他人已经做出的评论,他们在默认情况下离开休息时间,以防有人过来并在其后添加一个案例:在我工作的地方,编码标准说始终放默认为最后一种情况;所以在我们的情况下,在这种情况下休息只是多余的。 (这是我完全同意公司编码标准的一个案例,因为默认情况总是最后一个,你总是知道在哪里找到它,即使是在一个很长的开关语句中。)
至于返回后的中断,我倾向于省略中断,除非有任何不返回的执行路径,因为我发现它是多余的。 (我的例外情况是,在极少数情况下,如果一个案例中有多个执行路径,并且我无法通过快速扫描代码判断它们是否全部返回,那么我将把中断留给安全。)
答案 9 :(得分:0)
我个人并没有把这些休息放进去,但当其他人决定将返回(-1)移到交换机外部并忘记添加中断时,它可能会有所帮助。
答案 10 :(得分:0)
我会把这个突破显示出你不打算接下来的情况。
答案 11 :(得分:0)
在这个确切的例子中,对于这两个问题,这是个人偏好。一般来说,规则是这样的:没有休息的任何东西都会失败。这意味着(正如Pod所说),如果它们不是最后一个,那么在默认情况下放置休息是一个好主意。这也意味着如果你的案例包含一个回报,那么确实没有必要进行下面的休息。
答案 12 :(得分:-1)
请原谅我有限的知识,但是什么是强迫症?
除此之外,Brian Kernighan在break
语句中应该(不)使用switch
时提供good explanation。