书写规范整洁的Java代码

“Talk is cheap. Show me the code”相信百分之九十的程序员都听过,如果说有比这句更流行的,应该只有Hello world了。我觉得一份好的代码可以体现程序员很多的优点,而如果经常接手他人的代码,那么更能体会到一份整洁清晰的代码对后来者来说就是雪中送炭,最近读了《代码整洁之道》和《阿里巴巴Java编码规范》顺带花9.9去考了一下阿里规范的认证,就想稍微整理了一些常见且可以显著提高可读性的代码规则。

代码是程序员之间沟通的工具

用代码实现需求,只是万里长征走完了第一步,必须让代码表达自己的设计思想。试想一下,你负责的功能被另外一个同事接手,如果你的代码结构清晰、注释合理,他就不用频繁的询问代码疑点,不用打断你的工作。编写代码的时候,应该考虑到大家的阅读感受,减少阅读障碍,为整个团队创造代码,而不是需要他人做阅读理解一样才能理解你的逻辑。

(一)遵守规范,保持干净、简洁

主要体现在遵守团队制定的规范,比如每个包文件的命名格式;还有统一公共包的使用,比如团队提供了公共类,就不要再去使用其他框架提供的Util工具类(比如CollectUtils,常用的框架就提供了好几个)。很多新手程序员,看到不喜欢的规范就另起炉灶,需要某些工具类也不询问老司机公共库有没有,直接引入自己熟悉的库,可能造成兼容性或者其他问题。

(二)命名的规范

常见的需要注意的命名包括:字段、变量、方法名及参数

// 获取地址
private String getDiZhi();
//修改密码
private void modifyPassword(String password1 ,String password2)

规范的应该这样写:

// 手机号 mobileNo比phone更精确
String mobileNo= “13421800409”;
// 避免英文拼音混杂
private String getAddress();
// 参数的命名
private void modifyPassword(String oldPassowrd,String newPassword)

(三)减少if/else嵌套

过度的if嵌套,可读性极差,哪怕是原作者,时间一长肯定也是一脸问号。
对于if/else嵌套,我们更推荐使用位语句提高可读性

public boolean modifyPassword(Integer userId, String oldPassword, String newPassword) {
      if (userId != null && StringUtils.isNotBlank(newPassword) 
          && SpringUtils.isNotBlank(oldPassword)) {
          User user = getUserById(userId);
          if(user != null) {
             if(user.getPassword().equals(oldPassword) {
                return updatePassword(userId, newPassword)
             }
          }
      }
      return false;
}
 
转换成卫语句以后的代码如下:
Public Boolean modifyPassword(Integer userId, String oldPassword, String newPassword) {
     if (userId == null || StringUtils.isBlank(newPassword) || StringUtils.isBlank(oldPassword)) {
            return false;
     }
     User user = getUserById(userId);
     if(user == null) {
           return false;
      }
     if(!user.getPassword().equals(oldPassword) {
           return false;    
     }
     return updatePassword(userId, newPassword);
}

(四)抽离try/catch,抽取超长方法

大家有没有见过一个超长的方法,从头到尾被一个try/catch照顾着?这种不负责的写法相信大家或多或少都遇到,其实并非每行代码都会抛出错误,只要将会抛出错误的业务放在一个独立的方法即可;同时如果一个方法太长,即使没有try/catch,我们也将该业务抽取的更细一点提高可读性

private void doSomething() {
    try { 
    //20行 第一步处理A
    ......
    //20行 第二步处理B
    ......
    //20行 第三步处理C
    ......
    } catch (Exception e) {
       logger.error(e);
    }
}


===================after======================
private void doSomething() {
     //第一步处理A
    doSomething1();
    //第一步处理B
    doSomething2();
    //第一步处理C 
   doSomething3();
}
private void doSomething1(){}
private void doSomething2(){}
private void doSomething3(){
    try{
    } catch (Exception e) {
       logger.error(e);
    }
}

(五)如果一个方法参数过多,可以考虑使用对象接收参数;

最常见的实践就是,根据条件查询列表,我们都会封装一个查询对象接收查询条件,而不会方法提供若干个参数接收,同理我们自己写的方法如果参数过多也应该这样实现

(六)多使用公共类还有lombok插件,比如集合和字符串的判断,用工具类比自己写判断更精简;Lombok组件通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法

你可能感兴趣的:(书写规范整洁的Java代码)