也谈代码规范 (转)
看了湘南和也写的程序编码应保持良好的规范(C#) ,我也忍不住要说上两句。这两年来,做了几个项目,技术没有长进多少,对于规范倒是有了不少的体会。
湘南和也提到的四点规范是比较重要的,我再补充几点。
1、常量的命名:常量使用大写字母,各个单词之间通过下划线的划分。譬如BASE_SALARY;
2、变量的命名:变量的首字母小写,之后的单词的首字母大写。譬如baseSalaryLow;
3、常量和变量的命名:两者都必须注意一个问题,就是单词的准确性。在一篇不错的代码中出现了单词拼写的错误,会让人感觉好像一锅好汤掉进了几颗老鼠屎;
4、代码的缩进:缩进要保持一致。很多规范会建议利用tab作为缩进的占位符号。我是不建议这样做,因为不同的文本编辑器对于tab的显示都不一样,如果有些地方使用了tab,有些地方使用了相应的空格,那么就会出现在这个编辑器中看着还整整齐齐的,换到另外一个编辑器就会乱七八糟的情况。因此,我更倾向于使用空格来做为缩进的占位符号;
5、空格的使用:空格除了作为缩进的占位符之外,还在很多地方也是必需的。譬如,在条件语句和循环语句中,关键字之后就应该使用空格。在这点上,湘南和也给出的代码并没有做到,如果这样写会更好:
if (hidbrand == ",") {
Body.txtHidBrand.Text = "";
} else {
Body.txtHidBrand.Text = hidbrand;
}
如果大括号与条件语句的括号是同一行的话,大括号之前也要使用括号。同时,除了湘南和也提到的赋值语句中的等号前后要使用空格之外,各种运算符的前后也应该使用空格,除了自增(++)、自减(--)和逻辑非(!)运算符之外。例如:
if (i != arrHidBrand.Count - 1)
hidbrand += ",";
6、换行的使用:不管是C++、Java还是C#,你都可以将所有代码写在同一行。但是如果你真的这么做了,那么阅读你的代码简直就是噩梦。因此定好一行代码不超过多少列也是相当必要的。这可以让阅读代码者看得更舒服,因为他不需要来回拖动横向滚动条了;
7、变量的作用域:定义变量的时候要考虑变量的作用域。譬如,在循环语句中,通常都会使用一个变量作为循环的标志,这个变量应该定义为局部变量,仅循环的区域可见。譬如:
for (int i = 0; i < list.length; i++) {
![](/Images/dot.gif)
}
i的定义就应该出现在for循环的括号中,而非for循环之外;
8、尽量避免使用Magic Number和Magic String:这一点在我的上一篇Post已经作了详细讨论;
9、注释的使用:代码都应该有一个注释头,包含一些版权声明,作者,修改历史记录等信息。在方法之前都应该使用多行注释来说明方法的功能和参数的含义。单行注释过长的时候,要使用多行注释。
就想到这么多了,如果各位朋友有兴趣,还请继续补充,不吝赐教。最后,我还想说的一点就是,虽然在实际的开发当中都会有专门的工具来对代码进行format,也会有专门的工具来检查代码是否符合规范,但是我们还是应该将这些规范牢记在心,成为你写代码的习惯,毕竟工具不是万能的,而且工具也有失效的时候。
湘南和也提到的四点规范是比较重要的,我再补充几点。
1、常量的命名:常量使用大写字母,各个单词之间通过下划线的划分。譬如BASE_SALARY;
2、变量的命名:变量的首字母小写,之后的单词的首字母大写。譬如baseSalaryLow;
3、常量和变量的命名:两者都必须注意一个问题,就是单词的准确性。在一篇不错的代码中出现了单词拼写的错误,会让人感觉好像一锅好汤掉进了几颗老鼠屎;
4、代码的缩进:缩进要保持一致。很多规范会建议利用tab作为缩进的占位符号。我是不建议这样做,因为不同的文本编辑器对于tab的显示都不一样,如果有些地方使用了tab,有些地方使用了相应的空格,那么就会出现在这个编辑器中看着还整整齐齐的,换到另外一个编辑器就会乱七八糟的情况。因此,我更倾向于使用空格来做为缩进的占位符号;
5、空格的使用:空格除了作为缩进的占位符之外,还在很多地方也是必需的。譬如,在条件语句和循环语句中,关键字之后就应该使用空格。在这点上,湘南和也给出的代码并没有做到,如果这样写会更好:
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
如果大括号与条件语句的括号是同一行的话,大括号之前也要使用括号。同时,除了湘南和也提到的赋值语句中的等号前后要使用空格之外,各种运算符的前后也应该使用空格,除了自增(++)、自减(--)和逻辑非(!)运算符之外。例如:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
6、换行的使用:不管是C++、Java还是C#,你都可以将所有代码写在同一行。但是如果你真的这么做了,那么阅读你的代码简直就是噩梦。因此定好一行代码不超过多少列也是相当必要的。这可以让阅读代码者看得更舒服,因为他不需要来回拖动横向滚动条了;
7、变量的作用域:定义变量的时候要考虑变量的作用域。譬如,在循环语句中,通常都会使用一个变量作为循环的标志,这个变量应该定义为局部变量,仅循环的区域可见。譬如:
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
i的定义就应该出现在for循环的括号中,而非for循环之外;
8、尽量避免使用Magic Number和Magic String:这一点在我的上一篇Post已经作了详细讨论;
9、注释的使用:代码都应该有一个注释头,包含一些版权声明,作者,修改历史记录等信息。在方法之前都应该使用多行注释来说明方法的功能和参数的含义。单行注释过长的时候,要使用多行注释。
就想到这么多了,如果各位朋友有兴趣,还请继续补充,不吝赐教。最后,我还想说的一点就是,虽然在实际的开发当中都会有专门的工具来对代码进行format,也会有专门的工具来检查代码是否符合规范,但是我们还是应该将这些规范牢记在心,成为你写代码的习惯,毕竟工具不是万能的,而且工具也有失效的时候。