# 编程规范
# Flag
- https://github.com/reactive-streams (opens new window)
- 反应式(具有非阻塞背压的异步数据流)编程规范,已集成到Java9 API中Flow类
- 异步编程的反应式扩展 https://github.com/ReactiveX (opens new window)
- https://github.com/topics/conventions (opens new window)
- https://github.com/waylau/java-code-conventions (opens new window)
- 阿里巴巴Java开发手册 https://github.com/alibaba/p3c (opens new window)
- HTML/CSS开发规范指南 https://github.com/doyoe/html-css-guide (opens new window)
- https://www.apiref.com (opens new window)
- 日志集中管理 https://github.com/logdna (opens new window)
boolean
bool表示布尔型变量,bai也du就是逻辑型变量的定义符,zhi以英国数学家、布尔代数的奠基人乔dao治·布尔(George Boole)命名。
布尔型变量bool的取值只有false和true,0为false,非0为true。(例如-1和1都是true)
JSON Schema (opens new window) 实际上就是一个JSON文件,文件内容是对JSON数据的结构及内容的约束, 就像是xml文件的xsd文件对xml的验证。
# 命名规范
- 驼峰式命名法介绍:驼峰式命名法由小(大)写字母开始,后续每个单词首字母都大写。
- Pascal Case (大驼峰)式命名法:首字母大写。
- Camel Case (小驼峰)式命名法:首字母小写。
- kebab-case(短横线命名):HTML 特性是不区分大小写的,无法使用驼峰命名
- 项目名:全部小写,可使用
-
或_
连接符以分割单词,且不能有空格、中文和其他特殊字符 - 包名:全部小写,单词不需分割,且不能有空格、中文和其他特殊字符
- 常量:全部大写,可使用
_
连接符以分割单词 - 变量:小驼峰式命名法,前缀应当是名词。尽量在变量名字中体现所属类型,如:length、count表示数字类型;name、title表示字符串类型
- 函数:小驼峰式命名法,前缀应当为动词。
- 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
- 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。注意,即使纯拼音命名方式也要避免采用。
- 类名使用UpperCamelCase风格,但以下情形例外:DO / BO / DTO / VO / AO / PO等。
- 方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰形式。
- 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
- 抽象类命名使用Abstract或Base开头。
- 异常类命名使用Exception结尾。
- 测试类命名以它要测试的类名开始,以Test结尾。
- 类型与中括号紧挨相连来定义数组。
- POJO类中布尔类型的变量,都不要加is前缀,否则部分框架解析会引起序列化错误。
- 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。
- 杜绝完全不规范的缩写,避免望文不知义。
- 最好逐一声明每个变量而不是写在一行。
- Java的变量声明尽量靠近变量第一次使用的地方。
待办注释
//TODO
待实现//XXX
勉强可以工作,但是性能差//FIXME
代码错误,必须修复
# GNU风格版本规则
MAJOR.MINOR.PATCH
即:主版本号.次版本号.修正版本号
Major.Minor.Revision
即:主版本号.次版本号.修正版本号
Major
主版本号:表示当前APR的主版本号,它的变化通常意味着APR的巨大的变化,比如体系结构的重新设计、API的重新设计、 重大的重构、重大的feature
改动、重大的不兼容性的变化等等,而且这种变化通常会导致APR版本的向前不兼容。Minor
次版本号:发布较大的新feature
功能,或者较大的重构或者模块变化,或者出现不兼容性改动,会增加子版本号; 子版本的发布会伴随着完整的change log
,算是一个较大的版本发布,有仪式感Revision
/PATCH
修正版本号:往往是bug fix
,或者增加较小的feature
,较小的功能改进或者模块变化, 在保证完整向后兼容的前提下,会增加修正版本号当主版本号增加时,子版本号及修正版本号置
0
当子版本号增加时,修正版本号置
0
按照测试过程标识
Alpha
版:预览版或内部测试版,一般不向外部发布,会有很多Bug。Beta
版:公测版。RC
版:Release Candidate
候选版本。也叫做Gamma
版本。
# Commit提交规范
- linking-a-pull-request-to-an-issue-using-a-keyword (opens new window)
- angular.js-git-commit-guidelines (opens new window)
- AngularJS Git Commit Message Conventions (opens new window)
- 关于git提交规范 (opens new window)
- git commit 提交规范 (opens new window)
- https://github.com/commitizen (opens new window)
- bugfix/fix/fixed: 表示修复 bug
- feature: 表示增加新功能
- add: 表示增加类、文件、代码块等
- delete/del: 表示删除类、文件、代码块等
- update: 表示对代码块、功能的更新
- refactor: 表示对代码块、功能重构(即不是新增功能,也不是修改bug的代码变动)
- arch: 表示输出中间版本,用于测试等
- release to v1.0.0: 表示打包输出的版本号
- test:增加测试
- chore:构建过程或辅助工具的变动
- mod 修改
- changed ( 完成的任务 )
- rem:移除(Remove,移除功能)
- feat:新功能(feature)
- docs:文档(documentation)
- style:格式(不影响代码运行的变动)
# switch
- 在Python中没有
switch
语法 - JavaScript的
switch
语法跟Java一样 - 在Java中
如果
default
不是switch
代码块中最后一个case
,请记得用break;
结束默认case
。
switch ("A".toLowerCase()) {
case "a":
System.out.println("a");
// 注意:此处如果条件满足但没有添加break,则代码会继续执行,
// 会无条件执行后面的语句,直到遇到break
//break;
// fall thorugh
case "b":
System.out.println("b");
break;
default:
// 如果default写在最前面,会先执行,
// 但是如果没有写break;还是会无条件执行后面的语句
System.out.println("default");
break;
}
- 在Go中
- 左花括号
{
必须与switch
处于同一行; - 条件表达式不限制为常量或者整数;
- 单个
case
中,可以出现多个结果选项,以,
分割; - 与C语言等规则相反,Go语言不需要用
break
来明确退出一个case
; - 只有在
case
中明确添加fallthrough
关键字,才会继续执行紧跟的下一个case
; - 可以不设定
switch
之后的条件表达式,在此种情况下,整个switch
结构与多个if...else...
的逻辑作用等同。
switch strings.ToLower("A") {
case "a":
fmt.Println("a")
case "b":
fmt.Println("b")
default:
fmt.Println("default")
}