本规范适用于所有编程语言
关于代码规范的简单原则,以下几条同等重要
- 实现需求
- 可维护性高
- 性能高
可维护性与性能有时候是冲突的,追求可维护性可能会牺牲性能,追求性能可能会损害可维护性;二者必须有所取舍;所以针对这两者有以下几条建议,六四开即可:
- 对于基础的、公共的代码,在实现功能,追求性能的前提下保证可维护性
- 对于业务相关的代码,在实现功能,追求可维护性的前提下保证性能
可维护性又包含以下几点
- 易读性
- 可扩展性
可维护性是为了后面的人考虑,后面的人包括将来可能接手这部分代码的人,也包括未来的自己。自己的代码易维护,未来的自己会感谢过去的付出;交接更简单,别人也会感谢你。自己才可能有更多时间做更多事,否则只能在几件固定的事情上转转,在计算机的这个领域如果一直只能在固定的事情上转,进步就太有限了。
名词解释:
- 字面值:出现在代码中的基本类型值和字符串为字面值。又称做字面量、魔数、魔鬼数字、常量值。
let a=1//1在此处为字面值
- 驼峰命名法(camel):第一个单词首字母小写,后面每个单词首字母大写
- 帕斯卡命名法(Pascal):又称做大驼峰命名法,每个单词首字母大写
- 蛇型命名法:全小写、下划线分割各个单词
所有规范里面首先必须遵守的原则:
- 标识符命名
- 要见名知义,不要有二义性。代码就是你的孩子,一定要给孩子起个好名字。
- 只使用英文和下划线命名,标识符不要出现英文和下划线以外的任何字符,也不要使用拼音命名标识符。
- 包名、项目名使用蛇形命名法,且命名应尽量简短,避免冗长。
- 不要反转域名作为包名
- 类、结构体、枚举、接口使用驼峰命名法
- 函数(包括成员函数、顶级函数)、变量(包括顶级变量、成员变量)、属性、函数参数使用帕斯卡命名法
- 对于类、结构体、枚举、接口等.cj源文件,文件名必须与这些声明的类型名完全一致,比如有一个类名叫做
TimeWheel,文件名必须是TimeWheel.cj。 - 对于顶级函数顶级变量应当在专门的文件声明,与类、结构体、枚举、接口的声明在文件上分开,且声明它们的文件名采用蛇形命名法。
- 如果一个文件内有不止一个声明,应以文件内的主要功能或声明作为文件名。
- 包名、项目名使用蛇形命名法,且命名应尽量简短,避免冗长。
- 包与模块的划分
- 同一类的功能划分到同一模块
- 一个包内的代码完成同一个目的的功能
- 一个类、结构体内部完成一件事
- 一个函数完成一件事的某一步。
- 类与结构体的选择
- 结构体用于声明不变模式、适用于数量比较少的小类型(实例成员变量少、成员变量占用空间小)。
- 对于实例特别多特别集中的情况,适合声明为类,即使每一个实例成员都很少、占用空间也很小,比如DataModel和json库。
业务实现规范
- None和空字符串不能拥有业务含义。
- 只有一种情况下0可以有业务含义,即某些业务逻辑的起始状态可以从0开始。
- 如果已经有代码已经给这些值赋予了业务意义且很难改变了,新的与之无关的代码要保证这一点。
重复代码与公共代码
- 服务器逻辑要逐步做到按照模块划分子工程。前端逻辑也要逐步做到按照模块划分子目录或子模块。
- 服务器逻辑实现服务化,一个业务内的代码只出现在相关子工程内以RPC服务的形式开放给其它模块调用。
- 服务器业务无关的代码在公共子工程内,其它子工程通过maven添加公共代码包依赖。
- 前端业务无关的代码在公共子工程内,其它模块通过通用域名访问,比如名为common的二级域名
关于版本控制
- git的master,只能有一个工程的目录结构,不能在主干目录下创建其它目录结构。
- 所有git分支目录分为以下几类
- 仓颉SDK长期支持版本项目分支以
lts/开头,仓颉版本号结尾,比如仓颉1.0.x创建分支为lts/1.0 - 仓颉SDK短期支持版创建分支为
sts/x.y - 对于有重大变更的nightly可以创建分支为
nightly/x.y
- 仓颉SDK长期支持版本项目分支以
技术选型
所有同类api库或框架只使用一种 良好的代码风格,在形成阶段可能会很痛苦,一旦形成习惯,将会提升很多的开发效率。 保持风格一致,会降低很多沟通成本。 我们的目标是:所有代码看起来像一个人实现的。这个“人”就是我们整个的开发团队。
代码风格
- 尽快忘记过往编程习惯,并形成新的编程思想
- 每种编程语言都有自己的特色,也必然拥有自己独特的编程思想
- 不要受过往经验束缚,也不要试图跟自己主用编程语言比较,否则会阻碍迅速掌握一种编程语言
- 仓颉是编译期优化的静态语言,不要试图用拥有动态特性的语言跟它类比。
- 多学习几种编程语言,不一定用它们开发,主要是为形成灵活的编程思想。掌握的语言多了,自然就容易形成每种语言都有独特的编程思想的认识。
- 语言既思想,语言会影响人的思维。自然语言如此,编程语言也是。所以不要期待可以一招鲜吃遍天。
- 开发者只能顺应语言特性实现功能
- 而不是停留在过往的舒适区,用一套编程思想面对各种编程语言。
- 就像没有人能用汉语思维学习英语,反过来也不能。
- 仓颉是图灵完全的编程语言。
- 我相信不存在用别的语言能实现,用仓颉却实现不了的功能。