JAVA | 代码风格及规范

前言

最近在看阿里的《码出高效 Java开发手册》一书,读到代码风格这一章节。工作了几年,再看这一章节发现有些代码规范也没有做到。大公司对于代码开发规范比较重视,对大部分的小公司而言就没有那么关注了。而这些编码习惯会跟随你一辈子,在我看来,好的编码习惯会有助提升你代码的可读性,维护性,更是一个优秀的程序员必备的素质。

命名规范

  • 包名同一使用小写,点分隔符之间有且仅有一个自然语义的英文单词。包名统一使用单数形式,但是类名如果有复数含义,则可以使用复数形式。
  • 抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾,测试类命名以它要测试的类名开始,以Test结尾。
  • 类型与中括号紧挨相连来定义数组。
  • 枚举类名带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开

命名需要做到望文知义,从而减少注释的内容,达到自然解释的作用。而不规范的缩写会导致代码理解困难,更大的罪过会把其他人引导到一个错误的方向上。例如把condition缩写成condi,类似的缩写会降低代码的可读性。

一般的情况下,变量的命名需要满足小驼峰格式。但存在一种特殊情况,在定义类成员变量的时候,特别是在POJO类中,针对布尔类型的变量,命名不要加is前缀,否则部门框架解析会引起序列化错误。例如,定义标识是否删除的时候,成员变量为Boolean isDeleted,它的getter方法也是isDelete(),在框架反向解析的时候,“误以为”对应的属性名是delete,导致获取不到属性,进而抛出异常。但是在数据库建表中,推荐表达是与否的值采用is_xxx的命名方式,针对此种情况,需要在中设置,将数据表中的is_xxx字段映射到POJO类中的属性Xxx

代码展示风格

缩进

书中推荐使用4个空格缩进,禁止使用Tab键。因为在不同编辑器对Tab的解析不一致,因此视觉体验会有差异,而空格在不同编辑器之间是兼容的。

空格

空格的使用又有如下规定:

  1. 任何二目,三目运算符的左右两边都必须加一个空格
  2. 注释的双斜杠与注释内容之间有且仅有一个空格
  3. 方法参数在定义和传入时,多个参数逗号后面必须加空格
  4. 如果大括号中内容为空,则简洁的携程{}即可,大括号内无需换行和空格
  5. 左右小括号与括号内部的相邻字符之间不要出现空格
  6. 左大括号前需要加空格

示例:

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个,超出则要换行,换行遵循如下的规定:

  1. 运算符与下文一起换行
  2. 方法调用的点符号与下文一起换行
  3. 方法调用中的多个参数需要换行时,在逗号后换行
  4. 在括号前面不要换行

方法行数约定一个方法内一般不超过80行,不包括注释、换行、空行、左右大括号。只有5%不到的方法才会超过80行,而这些方法通常都还有优化的空间。

控制语句

  1. 在if、else、while、do-while等语句中必须使用大括号。及时只有一行代码,不能省略大括号。
  2. 在条件表达式中不允许有复制操作,也不允许在判断表达式中出现复杂的逻辑组合。
  3. 多层嵌套不超过三层,超过三层的if-else逻辑判断代码,推荐使用卫语句、策略模式、状态模式等来实现
  4. 避免采用取反逻辑运算符。比如if(x<10)表达x小于10,而不能使用if(!(x>=10))。

卫语句示例:卫语句就是把复杂的条件表达式拆分成多个条件表达式,比如一个很复杂的表达式,嵌套了好几层的if - then-else语句,转换为多个if语句,实现它的逻辑,这多条的if语句就是卫语句.

if (obj != null) {
    
    
  doSomething();
}
 
转换成卫语句以后的代码如下:
if (obj == null) {
    
    
   return;
}
doSomething();

代码注释

类、类属性、和类方法的注释必须遵循Javadoc规范,使用文档注释/** */ 的格式。

  1. 枚举的注释是必要的,它的代码极其稳定。如果定义和使用出现错误,通常影响较大。
  2. 注释的内容不仅限于解释属性值的含义,还可以包括注意事项、业务逻辑。
  3. 枚举类的删除或者修改都存在很大的风险。不可直接删除过时属性,需要标注为过时,同时注释说明过时的逻辑考虑和业务背景

单行注释和多行注释,特别强调此类注释不允许写在代码后方,必须写在代码上方,这是为了避免注释的参差不齐,导致代码版式混乱。

猜你喜欢

转载自blog.csdn.net/u012294515/article/details/100710541