编码规范

2022-06-28 20:57:34 浏览数 (1)

本文最后更新于 774 天前,其中的信息可能已经有所发展或是发生改变。

为什么要有编码规范

编码规范对于程序员而言尤为重要,有以下几个原因:

  • 一个软件的生命周期中,80%的花费在于维护
  • 几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护
  • 编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码
  • 如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误,一如你已构建的其它任何产品

为了执行规范,每个软件开发人员必须一致遵守编码规范

遵循阿里的的编码规范(P3C)

  • 安装IDE插件

什么是代码复查(Code Review)?

  • 代码复查又叫“代码审查”,其基本思想是在开发人员编写完自己的代码后,由其他人进行复查,检查代码中存在的问题。
  • p代码复查的一个基本理论是,当越早发现代码存在的缺陷,解决缺陷的代价就越低

代码复查往往分成以下一个方面进行审查:

  • 代码风格
    • 代码格式
  • 重大缺陷
    • SQL注入问题
    • 性能问题
  • 设计逻辑与思路的审查
    • 代码逻辑控制是否有问题
    • 代码是否与最初的设计存在出入

代码复查常见问题

1.代码格式

  • 未安装静态代码检查工具
  • 代码的缩进仍然使用TAB键,而不是空格
  • 未使用快捷键“Ctrl Shift F”格式化

2.代码注释

  • 存在大段代码没有注释的情况,最好有简单的注释说明一下。
  • 程序的重要分支没有注释,分支的注释有利于理解业务逻辑。
  • 代码注释与实现不一致。
  • 代码注释多余或者没有实际意义。
  • 常量注释最好采用多行注释的风格而非单行注释。
    • 说明:这样做的原因是,在IDE中,外部调用常量的地方可以看到注释

3.命名规范

  • 常量定义问题,很多数字(魔法数字)、字符应该定义为常量,并指定有意义的名称,便于理解和维护

4.代码结构

  • 程序没有分层的概念
  • 每层的职责要分明
  • 类方法的参数列表过长,应该抽象为一个参数类
  • 存在多层if嵌套和多层while嵌套的情况
  • 无效的引用,代码中存在很多无效的包、类引用,应该去掉没用到的引用,或者使用快捷键CTRL SHIFT O重新组织一下导入
  • 无效代码
    • 存在空的方法或者没用到的变量,建议删除。
    • 一些业务处理类的方法参数中有pageNo相关的参数,但是实际上该函数并没有进行分页处理。
    • 复查时,经常看到大段的代码被注释掉,建议删除。 咱们有svn,如果想找到,可以查看svn历史版本。

第一章 正确性检查

1. 数据类型处理

int类型的数据作除法时要注意,得到的有可能不是想要的结果。

代码语言:javascript复制
int iFz= 2;
int iFm = 3; // 可能为0
// 错误的做法
Double present = iFz / iFm; // 实际得到的是0
*********************
int iFz= 2;
int iFm = 3; // 可能为0
// 正确的做法
if(iFm != 0) {
   Present = (double)iFz/iFm; // 做强制类型转换
} else {
   Present = 100;
}
  • 字符串判断时,空串和空格串的差异需要注意,apache common包中提供了相关的判断方法。
代码语言:javascript复制
String str="";
if (str != null &&str.length() != 0){
    //do sth
}
=====================================================================
String str="";
if (StringUtils.isNotBlank(str)){
    //do sth
}
  • Equals方法的使用
    • 字符串比较应当使用equals方法。
    • 应该用常量字符串在前,比较变量,避免null错误。
代码语言:javascript复制
String str_temp="temp";
if(str_temp=="test"){
    //do sth
}
******************
//正确的方法
String str_temp="temp";
if("test".equals(str_temp)){
    //do sth
}
  • 日期处理时,增加一个月,有代码实现时采用了加30天的做法。应该使用java8里的日期处理类
  • 不应当使用字符串拼接的方式,应该用StringBuffer或者StringBuilder代替
  • 多个数据库操作,没有使用事务(编程式事务、声明式事务)
  • 当发生异常时,一般先回滚事务,然后记录日志或者再抛异常,回滚事务意味着及早释放锁资源,并且防止记录日志时出异常,导致无法回滚。
代码语言:javascript复制
try {
    //do sth 
    commit(status);
} catch (Exception e) {
    rollback(status);//首先回滚事务,释放锁资源
    LOG.error("处理失败:", e);//再记录日志
}

Select *的使用,程序中不建议类似方式,需要明确写出要查询的列,避免列太多。

打开文件后,没有关闭,导致文件占用。

记录日志时应该避免出现NullPointException。

Post Views: 326

0 人点赞