为什么开关语句上的奇怪的缩进?

为什么imho缺less“case”的缩进 – switch语句中的关键字被认为是很好的样式?

在每个IDE中,“case”关键字的缩进看起来都不是默认的格式化选项:

switch (i){ case 0: break; case 1: break; } 

而我觉得这个格式更直观:

 switch (i){ case 0: break; case 1: break; } 

这背后有一些逻辑,这避开了我吗?

这些案例是逻辑标签。 许多人把标签放在与他们所在的块相同的缩进级别上。在我看来,这样就更容易阅读文本。

我将它与时间轴进行比较,您可以滚动浏览。 时间线上有标记,而不是缩进内容。 然后,您可以快速指出标签/标记的位置,而不会将您的眼睛从基线移开。

用4个字: 没有块,没有缩进

案件不打开块。 在C或C ++中,您甚至可以在开关块的开始处放置variables声明(但不调用初始化程序,除了静态variables,这是一个陷阱)。 你可以用switch做很多奇怪的事情,比如Duff的设备 。

因此,作为标签的情况下,缩进他们似乎并不直观,不缩进是大多数风格select的风格。

Java TM编程语言 1999年的官方Oracle 代码约定 (第7.8节)build议了一种开关样式,其中case语句相对于switch语句整体不缩进。

这是一个主观的select,但是Sun决定,如果每个人都坚持一种风格,并且select了这个,那就更好了。

有不同的缩进样式可供select。 AFAIK,只要你一直使用缩进样式,没有一个被认为是比其他人更好的样式。 对于我来说,缩进case标签更具可读性,类中的privateprotectedpublic标签也是如此,但是,我的IDE不会按照我的方式进行缩进。 我的代码不像我想要的那样可读。 好吧…

也许这是保持相同的缩进级别, if它的逻辑等价物expression在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 }