前言
最近在看阿里的《码出高效 Java开发手册》一书,读到代码风格这一章节。工作了几年,再看这一章节发现有些代码规范也没有做到。大公司对于代码开发规范比较重视,对大部分的小公司而言就没有那么关注了。而这些编码习惯会跟随你一辈子,在我看来,好的编码习惯会有助提升你代码的可读性,维护性,更是一个优秀的程序员必备的素质。
命名规范
包名同一使用小写,点分隔符之间有且仅有一个自然语义的英文单词。包名统一使用单数形式
,但是类名如果有复数含义,则可以使用复数形式。抽象类命名使用Abstract或Base开头
;异常类命名使用Exception结尾,测试类命名以它要测试的类名开始,以Test结尾。类型与中括号紧挨相连来定义数组。
- 枚举类名带上Enum后缀,
枚举成员名称需要全大写,单词间用下划线隔开
。
命名需要做到望文知义,从而减少注释的内容,达到自然解释的作用。而不规范的缩写会导致代码理解困难,更大的罪过会把其他人引导到一个错误的方向上。例如把condition缩写成condi,类似的缩写会降低代码的可读性。
一般的情况下,变量的命名需要满足小驼峰格式。但存在一种特殊情况,在定义类成员变量的时候,特别是在POJO类中,针对布尔类型的变量,命名不要加is前缀,否则部门框架解析会引起序列化错误
。例如,定义标识是否删除的时候,成员变量为Boolean isDeleted,它的getter方法也是isDelete(),在框架反向解析的时候,“误以为”对应的属性名是delete,导致获取不到属性,进而抛出异常
。但是在数据库建表中,推荐表达是与否的值采用is_xxx的命名方式
,针对此种情况,需要在中设置,将数据表中的is_xxx字段映射到POJO类中的属性Xxx
代码展示风格
缩进
书中推荐使用4个空格缩进,禁止使用Tab键
。因为在不同编辑器对Tab的解析不一致,因此视觉体验会有差异,而空格在不同编辑器之间是兼容的。
空格
空格的使用又有如下规定:
- 任何二目,三目运算符的左右两边都必须加一个空格
注释的双斜杠与注释内容之间有且仅有一个空格
方法参数在定义和传入时,多个参数逗号后面必须加空格
- 如果大括号中内容为空,则简洁的携程{}即可,大括号内无需换行和空格
- 左右小括号与括号内部的相邻字符之间不要出现空格
左大括号前需要加空格
示例:
try{
// 任何二目,三目运算符的左右两边都必须加一个空格
boolean condition = (count == 0) ? true : false;
// 关键词if与左侧小括号之间必须有一个空格
// 左大括号前需要加空格,左大括号后必须换行
if (condition) {
System.out.println("hello");
// else 的前后需要加空格
} else {
System.out.println("world");
}
// 如果大括号中内容为空,则简洁的携程{}即可,大括号内无需换行和空格
} catch (Exception e) {
}
// 方法参数在定义和传入时,多个参数逗号后面必须加空格
String result = getString(one, two, three);
换行
规定单行字符数不超过120个,超出则要换行
,换行遵循如下的规定:
- 运算符与下文一起换行
- 方法调用的点符号与下文一起换行
- 方法调用中的多个参数需要换行时,在逗号后换行
- 在括号前面不要换行
方法行数约定一个方法内一般不超过80行
,不包括注释、换行、空行、左右大括号。只有5%不到的方法才会超过80行,而这些方法通常都还有优化的空间。
控制语句
- 在if、else、while、do-while等语句中必须使用大括号。及时只有一行代码,不能省略大括号。
在条件表达式中不允许有复制操作,也不允许在判断表达式中出现复杂的逻辑组合。
- 多层嵌套不超过三层,
超过三层的if-else逻辑判断代码,推荐使用卫语句、策略模式、状态模式等来实现
。 - 避免采用取反逻辑运算符。比如if(x<10)表达x小于10,而不能使用if(!(x>=10))。
卫语句示例:卫语句就是把复杂的条件表达式拆分成多个条件表达式,比如一个很复杂的表达式,嵌套了好几层的if - then-else语句,转换为多个if语句,实现它的逻辑,这多条的if语句就是卫语句.
if (obj != null) {
doSomething();
}
转换成卫语句以后的代码如下:
if (obj == null) {
return;
}
doSomething();
代码注释
类、类属性、和类方法的注释必须遵循Javadoc规范,使用文档注释
/** */
的格式。
- 枚举的注释是必要的,它的代码极其稳定。如果定义和使用出现错误,通常影响较大。
- 注释的内容不仅限于解释属性值的含义,还可以包括注意事项、业务逻辑。
- 枚举类的删除或者修改都存在很大的风险。不可直接删除过时属性,需要标注为过时,同时注释说明过时的逻辑考虑和业务背景
单行注释和多行注释,特别强调此类注释不允许写在代码后方
,必须写在代码上方,这是为了避免注释的参差不齐,导致代码版式混乱。