- 缩进
1、使用的缩进的字符数为4个空格,用Tab(定义Tab键扩展成为4个空格键)来进行缩进,Tab键在不同的情况下会显示不同的长度,严重干扰阅读体验。4个空格的距离从可读性来说,正好。
2、在使用if或while等嵌套结构时,在if或while等语句下再进行Tab(扩展为4个空格)缩进,使程序看起来更清晰、美观。
- 变量命名
1、局部变量使用lowerCamelCase风格,必须遵从驼峰形式。局部变量名采用英文单词的来命名,这样更能明白变量的含义。绝不使用拼音与英文混合的方式或直接使用中文的方式。
正例:studentId/teacherId 反例: DaZhePromotion [打折] / getPingfenByName() [评分] / int某变量 = 3
2、遇到含义相同的变量,会在末尾用1,2来区别。但也有例外,在使用循环变量时,因无特殊含义,仅用i,j,k来定义。
正例:p1/p2/p3 和 for(i = 0;。。。)
3、在标识符命名方面,少采用缩写,若采用缩写则查询国际通用的写法,用会发音的部分来命名,并在不容易理解的缩写命名后添加注释。标识符长度跟随所要表达的含义来增减长度,以使其更容易理解。在标识符命名中,最重要的是要保持一致性——在整个程序中,对变量或是函数一类使用相同的命名规则。
正例:int temp 和 int tmp
- 每行最多字符数
1、每行行宽(含缩进)不允许超过100个字符。
2、当一个程序行很长时,在适当位置运用回车键将程序分行,使其不破坏语句的完整性,也使语句看起来显得不混乱、零散。
- 函数最大行数
1、一个函数允许包含语句的行数我限制为80行,不包括空行和注释。
2、一个函数的最大长度和函数的复杂程度以及缩进大小成反比。
- 函数、类命名
1、函数名使用lowerCamelCase风格,必须遵从驼峰形式。函数名用动词打头,以名词结尾的形式(少数会只有动词命名),使函数功能更容易理解。
正例:countWord/getId
2、类名使用UpperCamelCase风格,必须遵从驼峰形式。
正例:WordCount/Lib
- 常量
1、常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚。
正例:public static final int YEAR = 365; 正例: MAX_STOCK_COUNT 反例: MAX_COUNT
2、如果变量值仅在一个范围内变化用Enum类。如果还带有名称之外的延伸属性,必须使用Enum类,类名后缀带Enum以清晰表示,枚举成员名称需要全大写,单词间用下划线隔开。下面正例中的数字就是延伸信息,表示星期几。
正例:publicEnum{MONDAY(1),TUESDAY(2),WEDNESDAY(3), THURSDAY(4),FRIDAY(5),SATURDAY(6),SUNDAY(7);}
- 空行规则
1、变量定义和方法实现间增加空行,便于阅读。
2、在函数之间,增加空行来分割函数,这样使函数之间显得不拥挤,区分更加明显。
- 注释规则
1、类、类方法的注释使用/内容/格式。
2、一般在变量名后,添加一行注释。
正例:char option; //功能选项
3、边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。
4、注释尽量只用ASCII字符,不要用中文或其他特殊字符,利于程序的可移植性。
- 操作符前后空格
1、一元运算符与变量之间没有空格
正例:i++/!flag
2、二元运算符与变量之间必须有空格。
正例:int i = 0;/sum = x + y;
- 大括号位置
1、每个“{”和“}”都独占一行。
正例:
if (condition)
{
DoSomething();
}
else
{
DoSomethingElse();
}
2、在if等语句块较为简单时,也不省略左右大括号的使用,以使程序显得更清晰、工整。
- 其他规则
1、需要使用变量时,在使用前定义,避免一些需要用到其值时,无法获得的情况。例如:
正例:int i;
for(i = 0;。。。)
2、多个变量定义时分行写,使程序更加美观。
正例:x = 1;
y = 2;
z = 3;
3、变量初始化时,提倡在尽可能小的作用域中声明变量,离第一次使用越近越好。这使得代码易于阅读,易于定位变量的声明位置、变量类型和初始值。
正例:int i = 3;
4、多个不同的运算符同时存在时合理使用括号来明确优先级。
例:2 << 2 + 1 * 3 - 4 2 << (2 + 1 * 3 - 4)
5、避免相同的代码段在多个地方出现相同的代码,必须归纳出来并且用一个类封装起来。 语句嵌套层次不得超过3层,超出的必须抽取出中间函数。