美文网首页
编码规范

编码规范

作者: 新生代民工代表 | 来源:发表于2021-08-10 10:33 被阅读0次

    摘录自阿里编码规范
    地址:https://github.com/alibaba/p3c

    命名规范

    • 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
      反例:_name/_name/$Object/name/name$/Object$
    • 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用。
      正例:taobao / youku / hangzhou 等国际通用的名称,可视同英文。
      反例:DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 = 3
    • 类名使用UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:DO / BO / DTO / VO / AO
      正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion
      反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion
    • 方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰形式
    • 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
      正例:MAX_STOCK_COUNT
      反例:MAX_COUNT
    • 抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的类的名称开始,以Test结尾。
    • 中括号是数组类型的一部分,数组定义如下:String[] args;
      反例:使用String args[]的方式来定义。
    • POJO类中布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误。
    • 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。
      正例: 应用工具类包名为com.test.open.util、类名为MessageUtils(此规则参考spring的框架结构)
    • 杜绝完全不规范的缩写,避免望文不知义。
      反例:AbstractClass“缩写”命名成AbsClass;condition“缩写”命名成 condi,此类随意缩写严重降低了代码的可阅读性。
    • 如果模块、接口、类、方法使用了设计模式,在命名时体现出具体模式。 说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计理念。
      正例:public class OrderFactory;
      public class LoginProxy;
      public class ResourceObserver;
    • 对于Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,内部的实现类用Impl的后缀与接口区别。
      正例:CacheServiceImpl实现CacheService接口。

    常量定义

    1)不允许任何魔法值(即未经定义的常量)直接出现在代码中。
    反例:

    if (a == "9"){
    } else if(a == "10"{
    }
    //别人看到这个会很蒙,等于9和等于10到底是什么意思

    long或者Long初始赋值时,使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。
    说明:Long a = 2l; 写的是数字的21,还是Long型的2?

    不要使用一个常量类维护所有常量,按常量功能进行归类,分开维护。 说明:大而全的常量类,非得使用查找功能才能定位到修改的常量,不利于理解和维护。
    正例:缓存相关常量放在类CacheConsts下;系统配置相关常量放在类ConfigConsts下。

    如果变量值仅在一个范围内变化,且带有名称之外的延伸属性,定义为枚举类。下面正例中的数字就是延伸信息,表示星期几。
    正例:public Enum { MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4), FRIDAY(5), SATURDAY(6), SUNDAY(7);}

    代码格式

    • 大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行;如果是非空代码块则:
      1.左大括号前不换行。
      2.左大括号后换行。
      3.右大括号前换行。
      4.右大括号后还有else等代码则不换行;表示终止的右大括号后必须换行
    • 左小括号和字符之间不出现空格;同样,右小括号和字符之间也不出现空格。详见第5条下方正例提示。
      反例:if (空格a == b空格)
    • if/for/while/switch/do等保留字与括号之间都必须加空格。
    • 任何二目、三目运算符的左右两边都需要加一个空格。
      说明:运算符包括赋值运算符=、逻辑运算符&&、加减乘除符号等。
    • 采用4个空格缩进,禁止使用tab字符。
      说明: 如果使用 tab 缩进,必须设置 1个 tab 为 4个空格。 IDEA 设置 tab 为 4个空格时, 请勿勾选 Use tab character ;而在 eclipse 中,必须勾选 insert spaces for tabs 。
      正例: (涉及1-5点)
    public static void main(String[] args) {
          // 缩进4个空格
          String say = "hello";
          // 运算符的左右必须有一个空格
          int flag = 0;
          // 关键词if与括号之间必须有一个空格,括号内的f与左括号,0与右括号不需要空格
          if (flag == 0) {
                 System.out.println(say);
          }
          // 左大括号前加空格且不换行;左大括号后换行
          if (flag == 1) {
                System.out.println("world");
          // 右大括号前换行,右大括号后有else,不用换行
          } else {
                System.out.println("ok");
          // 在右大括号后直接结束,则必须换行
          }
    }
    

    注释的双斜线与注释内容之间有且仅有一个空格。
    正例:// 注释内容,注意在//和注释内容之间有一个空格。

    方法参数在定义和传入时,多个参数逗号后边必须加空格。
    正例:下例中实参的"a",后边必须要有一个空格。
    method("a", "b", "c");

    相关文章

      网友评论

          本文标题:编码规范

          本文链接:https://www.haomeiwen.com/subject/iljxbltx.html