个人代码规范

代码规范制定

(一)缩进

1.任何运算符左右必须加一个空格。

运算符包括赋值运算符=、逻辑运算符&&、加减乘除符号、三目运行符等。

2.缩进采用4个空格,禁止使用tab字符。

如果使用tab缩进,必须设置1个tab为4个空格。IDEA设置tab为4个空格时,请勿勾选Use tab character;而在eclipse中,必须勾选insert spaces for tabs。

(二)变量命名

1.代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。

反例: _name / __name / $Object / name_ / name$ / Object$

2.代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。

反例: DaZhePromotion [打折] / getPingfenByName() [评分] / int某变量 = 3
正例: alibaba / taobao / youku / hangzhou等国际通用的名称,可视同英文。

3.中括号是数组类型的一部分,数组定义如下:String[] args;

反例:请勿使用String args[]的方式来定义。

4.包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。

正例:应用工具类包名为com.alibaba.open.util、类名为MessageUtils(此规则参考spring的框架结构)

5.杜绝完全不规范的缩写,避免望文不知义。

反例: AbstractClass“缩写”命名成AbsClass;condition“缩写”命名成 condi,此类随意缩写严重降低了代码的可阅读性。

6.如果使用到了设计模式,建议在类名中体现出具体模式。

说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计思想。
正例:public class OrderFactory;
public class LoginProxy;
public class ResourceObserver;

7.枚举类名建议带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开。

说明:枚举其实就是特殊的常量类,且构造方法被默认强制是私有。
正例:枚举名字:DealStatusEnum,成员名称:SUCCESS / UNKNOWN_REASON。

(三)每行最多字符数

1.单行字符数限制不超过 120个,超出需要换行,换行时遵循如下原则:

第二行相对第一行缩进 4个空格,从第三行开始,不再继续缩进,参考示例。
运算符与下文一起换行。
方法调用的点符号与下文一起换行。
在多个参数超长,逗号后进行换行。
在括号前不要换行,见反例。

正例:
StringBuffer sb = new StringBuffer();
//超过120个字符的情况下,换行缩进4个空格,并且方法前的点符号一起换行
sb.append("zi").append("xin")...
	.append("huang")...
	.append("huang")...
	.append("huang");
反例:
StringBuffer sb = new StringBuffer();
//超过120个字符的情况下,不要在括号前换行
sb.append("zi").append("xin")...append
	("huang");
//参数很多的方法调用可能超过120个字符,不要在逗号前换行
method(args1, args2, args3, ...
	, argsX);

(四)函数最大行数

个人觉得函数的写法应该遵循以下两点基本的原则:

1.当发现函数中有重复代码的时候,说明你可以将它封装成一个新的函数了
2.一个函数的长度应不宜超过一屏(根据实际屏幕大小大概为30~45行)。

(五)函数、类命名

1.类名使用UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:(领域模型的相关命名)DO / BO / DTO / VO等。

反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion
正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion

2.方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰形式。

正例: localValue / getHttpMessage() / inputUserId

获取单个对象的方法用get做前缀。
获取多个对象的方法用list做前缀。
获取统计值的方法用count做前缀。
插入的方法用save(推荐)或insert做前缀。
删除的方法用remove(推荐)或delete做前缀。
修改的方法用update做前缀。

3.抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的类的名称开始,以Test结尾。

(六)常量

常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。

反例: MAX_COUNT
正例: MAX_STOCK_COUNT

(七)空行规则

方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同的语义之间插入一个空行。相同业务逻辑和语义之间不需要插入空行。
下列情况应该总是使用两个空行:

  1. 一个源文件的两个片段(section)之间
  2. 类声明和接口声明之间
  3. 两个方法之间
  4. 方法内的局部变量和方法的第一条语句之间
  5. 块注释或单行注释之前
  6. 一个方法内的两个逻辑段之间,用以提高可读性

(八)注释规则

1.类、类属性、类方法的注释必须使用Javadoc规范,使用/*内容/格式,不得使用//xxx方式。

说明:在IDE编辑窗口中,Javadoc方式会提示相关注释,生成Javadoc可以正确输出相应注释;在IDE中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。

2.所有的抽象方法(包括接口中的方法)必须要用Javadoc注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。

说明:对子类的实现要求,或者调用注意事项,请一并说明。

3.所有的类都必须添加创建者信息。

4.方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释使用/ */注释,注意与代码对齐。

5.所有的枚举类型字段必须要有注释,说明每个数据项的用途。

6.与其“半吊子”英文来注释,不如用中文注释把问题说清楚。专有名词与关键字保持英文原文即可。

反例:“TCP连接超时”解释成“传输控制协议连接超时”,理解反而费脑筋。

7.代码修改的同时,注释也要进行相应的修改,尤其是参数、返回值、异常、核心逻辑等的修改。

说明:代码与注释更新不同步,就像路网与导航软件更新不同步一样,如果导航软件严重滞后,就失去了导航的意义。

8.注释掉的代码尽量要配合说明,而不是简单的注释掉。

说明:代码被注释掉有两种可能性:
1)后续会恢复此段代码逻辑。
2)永久不用。
前者如果没有备注信息,难以知晓注释动机。后者建议直接删掉(代码仓库保存了历史代码)。

9.对于注释的要求:

第一、能够准确反应设计思想和代码逻辑;
第二、能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。完全没有注释的大段代码对于阅读者形同天书,注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路;注释也是给继任者看的,使其能够快速接替自己的工作。

原文地址:https://www.cnblogs.com/jiruqianlong/p/12505214.html