![码农修行:编写优雅代码的32条法则](https://wfqqreader-1252317822.image.myqcloud.com/cover/469/37323469/b_37323469.jpg)
法则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个空格作为缩进时,代码会像下面这样。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/22_01.jpg?sign=1739357798-lKlF9NmVO75SLdIzTX5sShtPKQoL1X6r-0-0bd897247d2d00cb95dd757c41f1fa9e)
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/23_01.jpg?sign=1739357798-62FklJDcajplQwKfrWtAcUKQ8dsdvrSy-0-91a5afeea47cff81fdac30ee4662dbbc)
case关键字和switch之间已经有了一个Tab,而case内部的处理代码又多了一个Tab,从开始写case下的主要代码时,左边就已经有了24个空格(3个Tab),使得代码更加靠右。然而通过调整switch…case…语句的排布方式可以解决这个问题,让case和switch语句对齐,像下面这样排布代码,层次清晰也没有造成多余的缩进。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/23_02.jpg?sign=1739357798-OPPN5CodN6uhnDdjqNZM1U4NVn6q0abQ-0-7eeb43e5152ef1eed95b1c8d15f70ed1)
还有一种反对的观点认为使用Ta b作为缩进会令代码在不同的编辑器中排布效果不一样。比如同一份代码在Visual Studio中能对齐,但在UltraEdit中却不能对齐。
实际上就缩进而言,只要Ta b和空格不混用,是不会出现上述情况的。出现上述情况是因为使用Ta b键控制代码左右的间隔来达到对齐效果。比如下面这部分代码,如果在某个编辑器中是在等号“=”左边使用了若干Ta b键使得“=”保持在同一竖线。那么用其他编辑器打开同一个文件时可能会出现“=”不在同一竖线的情况。比如下面的代码块在Visual Studio中对齐。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/24_01.jpg?sign=1739357798-NVta7sfTs3mh1ofAvSMEsNVISpw57ZOu-0-738d8807bc1234cce55a92557b035dca)
但用UltraEdit打开时可能会是如下这样,最后一个“=”没有与上面的对齐。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/24_02.jpg?sign=1739357798-1c8ABVxFBnISJvpZlRSMVZ5kywiy1Etw-0-54f82d03c7930a3493e52bdd8a454264)
原因是使用Ta b控制代码的左右间距时,编辑器会使用某种适配算法根据Ta b键所设置的对应空格数来显示Ta b的长度。不同的编辑器算法不同,因此可能存在不一样的对齐效果。而使用空格就不会出现这类情况。因此推荐使用的代码排布方式为:在缩进时使用Ta b,在其他代码块对齐时使用空格。这样就能达到代码在各种编辑器中保持同样效果的目的。如下所示。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/24_03.jpg?sign=1739357798-3dmb2P0A6gUg17CRhEhicN2W4BseUjr3-0-370cfdc304bdd6a8696dc85d1a63595a)
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/25_01.jpg?sign=1739357798-pgyYgzHz7JnQfefCDyredLeg8UzNCZBW-0-60c73588973a4c1d6bbb77e7a70667b8)
注:由于页面排版限制,本书的其余代码除特殊说明外,都使用1个Tab且Tab为4个空格的排布方式。