# 编程规范

# Flag

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即: 主版本号.次版本号.修正版本号
  1. Major 主版本号:表示当前APR的主版本号,它的变化通常意味着APR的巨大的变化,比如体系结构的重新设计、API的重新设计、 重大的重构、重大的feature改动、重大的不兼容性的变化等等,而且这种变化通常会导致APR版本的向前不兼容。

  2. Minor 次版本号:发布较大的新feature功能,或者较大的重构或者模块变化,或者出现不兼容性改动,会增加子版本号; 子版本的发布会伴随着完整的change log,算是一个较大的版本发布,有仪式感

  3. Revision/PATCH 修正版本号:往往是bug fix,或者增加较小的feature,较小的功能改进或者模块变化, 在保证完整向后兼容的前提下,会增加修正版本号

  4. 当主版本号增加时,子版本号及修正版本号置0

  5. 当子版本号增加时,修正版本号置0

按照测试过程标识

  1. Alpha版:预览版或内部测试版,一般不向外部发布,会有很多Bug。
  2. Beta版:公测版。
  3. RC版:Release Candidate候选版本。也叫做Gamma版本。

# Commit提交规范

  • 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中
  1. 左花括号{必须与switch处于同一行;
  2. 条件表达式不限制为常量或者整数;
  3. 单个case中,可以出现多个结果选项,以,分割;
  4. 与C语言等规则相反,Go语言不需要用break来明确退出一个case
  5. 只有在case中明确添加fallthrough关键字,才会继续执行紧跟的下一个case
  6. 可以不设定switch之后的条件表达式,在此种情况下,整个switch结构与多个if...else...的逻辑作用等同。
switch strings.ToLower("A") {
case "a":
    fmt.Println("a")
case "b":
    fmt.Println("b")
default:
    fmt.Println("default")
}

# 编程常用单词