为什么在switch语句中imho缺少的“ case”(关键字)缩进被认为是好的样式?
在几乎每个IDE中,似乎没有缩进“ case”关键字是默认的格式设置选项:
switch (i){
case 0:
break;
case 1:
break;
}
虽然我发现这种格式更直观:
switch (i){
case 0:
break;
case 1:
break;
}
这背后隐藏着一些逻辑吗?
为什么在switch语句中imho缺少的“ case”(关键字)缩进被认为是好的样式?
在几乎每个IDE中,似乎没有缩进“ case”关键字是默认的格式设置选项:
switch (i){
case 0:
break;
case 1:
break;
}
虽然我发现这种格式更直观:
switch (i){
case 0:
break;
case 1:
break;
}
这背后隐藏着一些逻辑吗?
Answers:
这些案例在逻辑上是标签。许多人将标签放置在与其所在的块相同的缩进级别上。我认为,这样可以更轻松地阅读文本。
我将其与可以滚动浏览的时间轴进行比较。时间轴本身上有标记,但没有缩进内容中。然后,您可以快速指出标签/标记的位置,而不必将视线从基线移开。
switch
块的内容从其switch
自身缩进一级,但是case
s从与其混合的代码中“缩进”一级。
case
部分的作用类似于标签,因为执行的流程将从上面的代码一直到下面的代码,不带break
。我仍然希望看到它们缩进。在我看来,没有缩进,switch
语句本身就隐藏了起来,很难看到事物的开始。但是,只有在案件太多的情况下这才是一个真正的问题,而这又是一个整体的“另一个问题”。
case
怎么办?您最终将在不同行上的相同压痕级别使用2个右括号。
用4个词表示:无障碍,无缩进。
案件没有打开障碍。在C或C ++中,您甚至可以在switch块的开头放置变量声明(但不调用初始化程序,除了静态变量,这是一个陷阱)。你可以做很多奇怪的事情有switch
,像达夫设备。
因此,由于案例只是标签,所以缩进似乎不是很直观,大多数样式选择的样式也不是缩进。
if-else
s序列的语法糖。虽然,因为它们看起来像标签,所以缩进可能更适合这种方式。
switch
确实引入了一个障碍,case
但没有。而且case
似乎引入了新的缩进级别,而switch
事实并非如此。
switch
本身不会引入一个块。人们通常将它用作引入块的依赖语句。
1999年官方的Java TM编程语言Oracle代码约定(第7.8节)建议使用switch样式,在这种样式中,case语句相对于switch语句整体不缩进。
这是一个主观选择,但Sun决定所有人都坚持一种风格并选择这种风格会更好。
FWIW,另一个选择是使用两个半缩进:
switch (i) {
case 1:
...
case n:
...
}