• 代码风格总结


    良好的代码风格,既可降低代码中潜在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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    相比写法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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    参考

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

  • 相关阅读:
    自研一个简易版本的OkHTTP
    发收一体的2.4G射频合封芯片Y62G,内置九齐MCU
    OpenAI推出首个AI视频模型Sora:重塑视频创作与体验
    大模型重塑软件开发,华为云AI原生应用架构设计与实践分享
    Java 程序猿看完这些面试题,想斩获 BAT 的 offer 都很难!
    Redis教程(二十二):Redis的过期删除和缓存淘汰策略
    【CMake】专用变量 ARGC ARGV ARGN 代表含义
    Kubernetes(k8s)资源管理
    艾泊宇产品战略:灵感于鬼屋,掌握打造卓越用户体验的关键要素
    STC89C51基础及项目第13天:小车go、软件调速
  • 原文地址:https://blog.csdn.net/huhu123444/article/details/126918233