为什么imho缺少“case”缩进 - switch语句中的关键字被认为是好的风格?
“case”关键字的缩进似乎不是每个IDE中的默认格式选项:
switch (i){
case 0:
break;
case 1:
break;
}
虽然我发现这种格式更直观:
switch (i){
case 0:
break;
case 1:
break;
}
这背后是否有一些逻辑,这让我望而却步?
答案 0 :(得分:49)
案例是逻辑标签。许多人将标签放在与它们所处的块相同的缩进级别。在我看来,通过文本阅读更容易。
我将它与您可以滚动的时间轴进行比较。您在时间线上有标记,而不是缩进内容。然后,您可以快速指出标签/标记的位置,而无需将视线远离基线。
答案 1 :(得分:25)
4个字:没有块,没有缩进。
案件没有打开一个街区。在C或C ++中,您甚至可以在switch块的开头放置变量声明(但不会调用初始值设定项,静态变量除外,这是一个陷阱)。您可以使用switch
执行许多奇怪的操作,例如Duff's device。
因此,由于案例只是标签,缩进它们似乎并不直观,而且缩进也不是大多数样式所选择的样式。
答案 2 :(得分:10)
1999年正式的Oracle Code Conventions for the Java TM Programming Language(第7.8节)推荐了一种开关样式,其中case语句不是相对于switch语句整体缩进的。
这是一个主观的选择,但Sun决定如果每个人都坚持使用一种风格会更好,并选择了这种风格。
答案 3 :(得分:5)
有不同的缩进样式可供选择。 AFAIK,没有被认为比其他人更好的风格,只要你一直使用缩进风格。对我来说,缩进case
标签更具可读性,同样适用于类中的private
,protected
和public
标签,但是,我的IDE不会按照我的方式进行缩进。我的代码不像我想的那样可读。哦,好吧......
答案 4 :(得分:4)
也许是为了保持与if
语句中表达的逻辑等价物相同的缩进级别?那就是:
switch(i){
case 0:
//do something 1
case 1:
//do something 2
}
看起来与其逻辑等价物相似:
if(i==0){
//do something 1
}else if(i==1){
//do something 2
}
答案 5 :(得分:0)
FWIW,另一个选择是使用两个半缩进:
switch (i) {
case 1:
...
case n:
...
}