![码农修行:编写优雅代码的32条法则](https://wfqqreader-1252317822.image.myqcloud.com/cover/469/37323469/b_37323469.jpg)
法则03:保留个性
函数的第一个左括号“{”,是在和函数同一行的最右边。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/26_01.jpg?sign=1739688957-4Y1RRKg6FT9BnUnws1sLg5pxB1BALbzB-0-38d0d4ccce84900b1486b32b026cfd4e)
还是另起一行放在最左边。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/26_02.jpg?sign=1739688957-uEZhvwndLtzJQWP9MMAEbk7e1JMWI6Ov-0-d5a4c6c806a2f67ddbeb1dff78c4b145)
if、for、do…while、while、try…catch、switch…case等语句的括号也有如下三种风格。
风格一:左括号在第一行最右边。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/26_03.jpg?sign=1739688957-SxaUIqdtjpJrRRPOnfx2QLDAxNPLVHGX-0-5dce491dce0782ba1e414d2006c74d9f)
风格二:左括号另起一行并与上一列对齐。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/26_04.jpg?sign=1739688957-9U26hxS6XizMdYEXf3xVaDJNS4QmdOLg-0-59a8a0d180642357895e40f7f69bb431)
风格三:左括号另起一行并加一个Ta b。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/26_05.jpg?sign=1739688957-qulNnRhHfAJBZoFvSanCH7e2FZO0VoI7-0-e0b08ada6fcaf5177cd5fd06cd206ecc)
等号“=”或其他各类运算符两边各加一个空格。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/26_06.jpg?sign=1739688957-tUqdmqi06nxYe8l9YoP0HS8bOT7ULCTn-0-5a8be9a5d27ed8adc0b0ecdbb57cb51f)
还是不要空格。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/26_07.jpg?sign=1739688957-j81jiGcVlnnlHP4OYRU74nTTGCZCOsZ1-0-000615d82977309d9d108b05704ee8e2)
或者是加若干个空格让代码块保持对齐。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/27_01.jpg?sign=1739688957-c3HVRKVhvTOqPzabRVdHw7dQtuvCHBFZ-0-41f35325f481dca1b438455819e1eb94)
行尾的分号“;”前面加1个空格。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/27_02.jpg?sign=1739688957-z5QPcRnENoiYKOHAd0nFYjJjqCnVTvOg-0-033032da7f44334676680c146356beba)
还是不加。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/27_03.jpg?sign=1739688957-7RkL61mnZY6iIHXZBKchIHjmdUu0sx5Z-0-47d0cba6cd54379e0e26b129127eba52)
定义函数时,函数的名称和后面的小括号“(”之间要加空格。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/27_04.jpg?sign=1739688957-bBGnbTr6BaWme7BXlEiQYHXqaf4gyUU4-0-0ecee06e020dcf0b9ee9b847f790aefd)
还是不加。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/27_05.jpg?sign=1739688957-hzXWAihMAqDOfcyNJcaMOeTpkeMkufPM-0-0cd8b0f414063c677902f1944a986bc3)
上述这些风格如何选择?其实代码的可读性不会因为一个括号的位置或多少了几个空格而受到影响。我认为以上这些风格都是可行的。甚至在一个项目组中也不要对风格进行限定,要鼓励软件设计师有自己的个性。但需要注意的是,一旦选定了一种风格,就要一直使用它,让它成为你职业生涯的一种“标志”。
我们就来欣赏各位高手的编程风格吧!
下面是Windows编程大师Charles Petzold[4]的风格。他的代码看上去十分整齐。函数名和后面的小括号“(”之间有1个空格,所有分号“;”前面都有1个空格,所有大括号“{”都另起一行,相关联的代码块也都保持对齐,同时使用了匈牙利标记法。此外注意其代码缩进为5个空格,非常特别。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/28_01.jpg?sign=1739688957-g5mYvlwuOHUaMLm1LhkkB3OGUZSeq0Ij-0-1220c7bb17116ad67c9e8a23eae031df)
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/29_01.jpg?sign=1739688957-MYPWTbOy0ERJPNyzpIDTKY7gHrhO4zbY-0-84a2da12955bd7955bf49f5dd650c28b)
下面是Linux之父Linus Torvalds大神的风格。其缩进为1个Tab(对应8个空格),大括号“{”在while或if语句同一行的右边,if语句后的单行代码并没有使用大括号对“{}”。此外最为“霸气”的是直接用自己的名字命名了设备驱动层电梯调度算法的函数名(摘自Linux-2.4.0内核源码)。
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/29_02.jpg?sign=1739688957-xWckD7QAvSYnZqTX3YKDYxlLKSHScLTv-0-27fd9dce138d5647c809c5d234c8256c)
![](https://epubservercos.yuewen.com/CBBFE3/19773740908833406/epubprivate/OEBPS/Images/30_01.jpg?sign=1739688957-YvvFWYjZgCxPXtvSJakQBCHneA06NVFE-0-946c474b3f0608a8ff046c85fcd42041)
当然关于代码风格我的建议是:作为普通软件设计师,很多时候需要“随和”一点,因为它并非原则性问题。虽然要形成自己的风格,但有时候“入乡随俗”也未尝不可。当新加入一个项目时,如果项目组没有明确要求代码风格,你可以按照自己的风格写代码。但如果项目组有明确的要求,那么就去适应该项目组的风格。
此外,如果你是项目管理者,我建议不要对代码风格有太多的限制,要鼓励软件设计师有自己的个性。