码农修行:编写优雅代码的32条法则
上QQ阅读APP看书,第一时间看更新

法则02:设置缩进

我在Z公司时,公司有一条编程规范是缩进必须为4个空格。但我从来没有遵守过,一直我行我素地按照我的风格:缩进1个Tab并且在Source Insight里把Tab设置为8个空格。幸运的是从来没有人找过我的“麻烦”。

后来到了H公司也有一条相同的编程规范。当我继续按照自己的风格写代码时,Pc-lint(一种C/C++代码静态分析工具)报错了。于是不得不遵守这条规范。但在离开H公司后我还是继续按照我的风格写代码。

缩进为1个Tab并且把Tab设置为8个空格,这其实也是Linux内核的编程规范,我很认可并一直使用。这么设置至少有以下几个好处:

1)当代码嵌套层次过多时,代码就会比较靠右,这样更容易发现问题,并及时优化。

2)可以在代码编辑器中把字体设置得稍小一点,代码看起来也会很有层次。这样在单屏里面能够装下更多代码,方便阅读。

3)如果确实有人对8个空格不适应,还有折中的余地,他可以在自己的IDE中把Tab设置为4个空格。这样对大家都没有影响。

一种反对的观点认为switch…case…语句会过于靠右,因为通常的做法是case关键字较switch关键字多一层缩进。使用Tab对应8个空格作为缩进时,代码会像下面这样。

case关键字和switch之间已经有了一个Tab,而case内部的处理代码又多了一个Tab,从开始写case下的主要代码时,左边就已经有了24个空格(3个Tab),使得代码更加靠右。然而通过调整switch…case…语句的排布方式可以解决这个问题,让case和switch语句对齐,像下面这样排布代码,层次清晰也没有造成多余的缩进。

还有一种反对的观点认为使用Ta b作为缩进会令代码在不同的编辑器中排布效果不一样。比如同一份代码在Visual Studio中能对齐,但在UltraEdit中却不能对齐。

实际上就缩进而言,只要Ta b和空格不混用,是不会出现上述情况的。出现上述情况是因为使用Ta b键控制代码左右的间隔来达到对齐效果。比如下面这部分代码,如果在某个编辑器中是在等号“=”左边使用了若干Ta b键使得“=”保持在同一竖线。那么用其他编辑器打开同一个文件时可能会出现“=”不在同一竖线的情况。比如下面的代码块在Visual Studio中对齐。

但用UltraEdit打开时可能会是如下这样,最后一个“=”没有与上面的对齐。

原因是使用Ta b控制代码的左右间距时,编辑器会使用某种适配算法根据Ta b键所设置的对应空格数来显示Ta b的长度。不同的编辑器算法不同,因此可能存在不一样的对齐效果。而使用空格就不会出现这类情况。因此推荐使用的代码排布方式为:在缩进时使用Ta b,在其他代码块对齐时使用空格。这样就能达到代码在各种编辑器中保持同样效果的目的。如下所示。

注:由于页面排版限制,本书的其余代码除特殊说明外,都使用1个Tab且Tab为4个空格的排布方式。