JNotepad/docs/代码规范.md
2023-08-27 19:38:32 +08:00

247 lines
9.1 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 代码规范
## 1. 排版规则
### 1.1 编码
**规 则IDE的text file encoding设置为UTF-8。**
**规 则IDE中文件的换行符使用Unix格式不要使用windows格式。**
**补 充:**
本项目中`.idea/encodings.xml`已定义src、resource目录为UTF-8编码禁止修改。
### 1.2 页宽
**规 则编辑器列宽应设置为120**
**说 明:**
当一行代码的长度过长时为了阅读方便应该换行展示。但因为每个人的字体设置屏幕大小有所不同因此需要统一列宽为120。
**补 充:**
IDEA默认列宽为120。本项目的.idea/codeStyles目录中应用的即为IDEA默认配置。
### 1.3 换行
**规 则第二行相对第一行缩进4个空格从第三行开始不再缩进而是与第二行保持同级。**
**规 则:运算符、方法调用的点符号与下文一起换行。**
**规 则:在多个参数超长时,逗号后换行。**
**示 例:**
```java
//符合规范
StringBuffer sb=new StringBuffer();
//超过100个字符的时候换行缩进4个空格并且方法钱的点符号一起换行
sb.append("wan").append("fang")...
.append("shu")...
.append("ju")...
.append("gu");
//在逗号后换行
method(arg1,arg2,arg3,...argx,
argx1)
```
### 1.4 缩进
**规 则程序块需要采用缩进风格编写缩进为4个空格。**
**说 明:** 不同的编辑工具会导致Tab字符的宽度不统一在编码时应注意其可能造成的问题。
**补 充:**
本项目的.idea/codeStyles目录中应用的即为IDEA默认配置。
### 1.5 空行
**规则:独立的程序块与变量声明之间加空行分割**
**示 例:**
```java
//不符合规范
if(log.getLevel()<LogConfig.getRecordLevel()){
return;
}
LogWriter writer;
int index;
```
```java
//符合规范
if(log.getLevel()<LogConfig.getRecordLevel()){
return;
}
LogWriter writer;
int index;
```
### 1.6 大括号
** 使用大括号即使是可选的**
** ** 大括号与if, else, for, do, while即使只有一条语句或是空也应该把大括号写上
** **
```java
//不符合规范的
if(writeToFile)
writeFileThread.interrupt();
```
```java
//符合规范的
if(writeToFile){
writeFileThread.interrupt();
}
```
** 对于非空块和块状结构大括号遵循Kernighan和Ritchie风格紧凑风格)。**
** **
* 左大括号前不换行
* 左大括号后换行
* 右大括号前换行
* 如果右大括号是一个语句函数体或类的终止则右大括号后换行; 否则不换行例如如果右大括号后面是else或逗号则不换行
** **
```java
//不符合规范
if(isOk)
{
someThing();
}
else
{
otherThing();
}
```
```java
//符合规范
if(isOk){
someThing();
}else{
otherThing();
}
```
** **
Kernighan和Ritchie风格指的是Kernighan和Ritchie的C Programming
Language一书中约定的大括号放在同一行规则这种编码风格比较紧凑也是Java官方和Google等诸多主流公司遵循的编码风格
** 空块可以简洁的写成{}除非它是多块语句的一部分**
** ** 一个空的块状结构里什么也不包含大括号可以简洁地写成{}不需要换行例外如果它是一个多块语句的一部分(if/else
try/catch/finally) 即使大括号内没内容右大括号也要换行
** **
```java
void doNothing(){}
```
### 1.7 小括号
** 用小括号来限定计算优先级**
** ** 没有理由假设代码的阅读者能够清晰的记住整个Java运算符优先级表
###2.8 空格
** 函数参数在“,”后需要加空格**
** 各种双目操作符比如=”,“<前后都要加空格**
** if, while等关键字后面需要有空格**
** ** 基本上Eclipse的自动格式化功能就能保证这些空格的正确使用
### 1.8 TODO
** TODO用于任务标记要避免出现无用的TODO标记**
** ** 自动生成代码中如果有TODO标记请根据需要编写注释或删除TODO标记避免产生无用的TODO影响他人跟踪任务
### 1.9 import
** import不要使用通配符**
** ** 不要出现类似这样的import语句import java.util.*使用通配符会造成歧义及不可预期的冲突或bug程序应保持清晰易懂无歧义
** import不要引用不需要的包**
### 1.10 变量
** 每次只声明一个变量**
** ** 不要使用组合声明int a,b;减少歧义性增强可读性
** 需要时才声明并尽快进行初始化**
** 使用非C风格的数组声明**
** ** 使用String[] args而非String args[]
** 谨慎的使用公共变量**
** ** 公共变量是增大模块间耦合的原因之一应减少没必要的公共变量以降低模块间的耦合度
## 2 命名规范
** 命名应尽可能做到见名知意力求语义表达清晰完整**
** 代码中的命名均不能以下划线或美元符号开始也不能以下划线或美元符号结束**
** 代码中的命名严禁使用拼音与英文混合的方式更不允许直接使用中文的方式**
### 2.1 package
** 包名均采用小写**
** 包名一般为一个单词**
** 内部包名规则一般为com.部门名称/站点域名.产品名/项目名.模块名通用包放在com.wanfangdata下**
** ** 由于历史遗留原因部分内部包名格式为部门名称.产品名/项目名.模块名原则上新建的包不要用此命名规则但暂时也不修改此规则的包名
### 2.2 Class
** 类的命名应该都是名词**
** 类名第一个字母要为大写其他每个单词的第一个字母为大写UpperCamelCase**
** 类名要用完整的单词除非是被公认的单词缩写**
** 抽象类命名应以Abstract为开头**
** 异常类命名使用Exception结尾**
** 测试类命名以它要测试的类名称开始以Test结尾**
** 如果使用了设计模式建议在类(接口)命名中体现出具体的设计模式**
** 枚举类名以Enum后缀结束美剧成员名称需要全部大写单词间用下划线分隔**
** **
```java
public class BalanceLimitAccountHandler;
public interface SqlSessionFactory;
public class LoginProxy;
```
### 2.3 Interface
**规 则:接口名的命名应该是名词或形容词**
**规 则接口名应以大写的I开头其他单词第一个字母都要大写UpperCamelCase**
**规 则:接口名要用完整的单词,除非是被公认的单词缩写**
**建 议接口类中的方法和属性不要加任何修饰符好public也不要加。**
### 2.4 方法命名
**规 则:方法名应以动词或惯用短语描述**
**规 则方法名第一个字母都要小写其他每个单词第一个字母都要大写lowerCamelCase**
**建 议:方法名中不要加入对象名字,可能会带来误解。**
**说 明:** 因为对象本身已经包含在调用语句中了
### 2.5 变量
**规 则:应避免用单个字符命名变量**
**规 则:代码中严禁使用拼音与英文混合的方式,优先使用英文而非拼音**
**规 则参数名第一个字母使用小写其他每个单词第一个字母大写lowerCamelCase**
**规 则:常量名应该为名词或名词短语**
**规 则常量名每一个字母都应为大写单词之间用“_”分开。**
**规 则:不允许出现任何魔法值(未经定义的常量)直接出现在代码中。**
**建 议:不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护。**
**规 则long或者Long初始赋值时必须使用大写的L不能是小写的l小写容易跟数字1混淆造成误解。**
**规 则局部变量名第一个字母使用小写其他每个单词第一个字母大写lowerCamelCase。**
**规 则:局部变量名可以更宽松的使用缩写,但除了临时变量和循环变量应避免单字符命名。**
**规 则POJO类中布尔类型的变量都不要加is否则部分框架解析会引起序列化错误。参考阿里java规范**
**说 明:**
定义为基本数据类型Boolean isSuccess的属性它的方法也是isSuccess()RPC框架在反向解析的时候“以为”对应的属性名称是success导致属性获取不到进而抛出异常。
## 注释规范
见目录: .idea/fileTemplates/code
如需增加新的注释模板进入IDEA设置->Editor->File and Code Templates可进行修改。
注意确保schema选择的是project。
![codeTemplate.png](images/codeTemplate.png)