良好的代码风格,既可降低代码中潜在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个命名规则