代码风格总结

良好的代码风格,既可降低代码中潜在bug数量,同时方便后续人员对项目理解和维护,Java代码语法检查工具有sonarLint,可在插件市场下载安装。

1 每行代码不要过长

尽量遵循80字符原则,这样可保证代码在不同尺寸屏幕显示样式相同,长单行代码在小屏幕显示时会因长度过长引起自动换行,或者需要用户不断滑动屏幕才能观看,影响阅读代码体验。代码折行,第二行比第一行缩进1/2tab,第三行及之后只需第二行对齐。

2 合理使用空格

需要添加空格的地方

  • 二目数学运算符、二目逻辑运算符的左右
  • if 、 else、 while、 swith 和左括号(之间
  • 逗号,分号之后

不需要空格的地方

  • 函数名和左括号之间
  • 分号和冒号之前
  • 左括号右边,右括号左边

3 合理空行

  • 函数定义和声明之前
  • 一组紧密联系的代码之前和之后

4 多添加日志

  • 所以抛出异常之前,都应打上日志,方便后续对发生异常的数据进行分析,可以即使在不复现异常情况对异常数据进行分析和向上回溯。

5 学会自定义异常

  • 对基础服务中不能处理的业务流程,使用自定义异受检查异常抛出,提醒上有游调用者可以有效感知到,清楚了解可能发生的异常,并进行处理。
  • 不在基础服务抛出上有异常文案,只抛出异常类型。
  • 合理对基础服务中的异常进行分组,不抛出下游无法处理的异常。
  • 对于同一类的多种异常可以使用异常码和异常信息。

6 C端接口和B端接口差别

  • 不要给C端返回没有使用到的数据,保证数据安全性。

7 URL定义规范

  • 关键词放入URL中,提高数据和URL相关性,避免过多参数
  • url长度越短越好
  • 适当使用连字符
  • 目录层次应该尽量不超过4层,方便用户找到。
  • url 英文字母全部使用小写,一则从用户使用角度来说,方便输入,不需要大小写切换;二则,有些服务器是区分英文字母大小写
  • 对于不同的操作使用不同请求方式,方便前端调用和区分,一定程度可以缩短URL长度,同时达到语义明确目的。

8 类嵌套不要太深度

过深的类嵌套,很容易增加代码的复杂度,因为所有对象都要在使用之前都要进行为空判断,除非保证已经经过了初始化,否则容易引起空指针异常。
使用optional可以降低对多层嵌套对象是否为空的代码复杂度。

public class TOrderResponse {
	private int code;
	private Order order;
}
public class TOrder  {
	private TOrderItem item;// note:实际开发中一个订单应该对应多个订单项
}
public class TOrderItem {
	private Coin;// 抵扣虚拟金币
} 

private Class Coin {
	private int number; //金币数量
	private long money; // 抵扣金额
} 

// 根据单个订单id查询订单信息得到tOrderResponse,然后获取订单里面的虚拟货币抵扣的金额
// 写法1:使用if
long money;
if (tOrderResponse != null) { 
     TOrder order = tOrderResponse.getOrder();
     if (order != null) {
         TOrderItem orderItem = order.getItem();
         if (orderItem != null) {
             Coin coin = orderItem.getCoin();
             if (coin != null) {
                 money = coin.getMoney();
             }
         }
     }

 }

//写法2:使用Optional的链式编程进行判断
long money = Optional.ofNullable(tOrderResponse)
        .map(TOrderResponse::getOrder)
        .map(TOrder::getItem)
        .map(TOrderItem::getCoin)
        .map(Coin::getMoney)
        .orElse(0L);
        

相比写法1,使用Option代码更加简洁,Optional中map实现

public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
        Objects.requireNonNull(mapper);
        // value为null,返回一个value为空Optional对象
        if (!isPresent())
            return empty();
        else {
            return Optional.ofNullable(mapper.apply(value));
        }
    }

参考

[1] 优秀的代码风格
[2] 网站URL规范化设计的8个命名规则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值