笔记起草背景:看过很多人开发的代码,身边的人最近吐槽别人的代码风格。良好的风格对于自己开发过程中并无多大帮助,很大程度上是愉悦别人,注重团队合作。
开发规范
1.变量名称命名规范:ab_c 全小写,单词之间以``分隔。
2.函数命名规范:oneTwoThree 首单词小写,其它单词首字母大写。如遇到缩写,把该缩写看成单词处理,即首字母大写其余小写。
3.尽可能使用描述性的命名, 别心疼空间, 毕竟相比之下让代码易于新读者理解更重要. 不要用只有项目开发者能理解的缩写, 也不要通过砍掉几个字母来缩写单词.
代码比对
int price_count_reader; // 无缩写 int num_errors; // "num" 是一个常见的写法 int num_dns_connections; // 人人都知道 "DNS" 是什么
int n; // 毫无意义. int nerr; // 含糊不清的缩写. int n_comp_conns; // 含糊不清的缩写. int wgc_connections; // 只有贵团队知道是什么意思. int pc_reader; // "pc" 有太多可能的解释了. int cstmr_id; // 删减了若干字母.
4.文件名要全部小写, 可以包含下划线或连字符 (-), 依照项目的约定. 如果没有约定, 那么 “_” 更好.
可接受的文件命名示例: my_useful_class.cc my-useful-class.cc myusefulclass.cc myusefulclass_test.cc // _unittest 和 _regtest 已弃用.
5.类型名称(类, 结构体, 类型定义 (typedef), 枚举, 类型模板参数)的每个单词首字母均大写, 不包含下划线: MyExcitingClass, MyExcitingEnum.
6.static 或 const 的变量, 命名时以 “k” 开头, 大小写混合. 例如:
const int kDaysInAWeek = 7;
7.感觉 Google 的命名约定很高明, 比如写了简单的类 QueryResult, 接着又可以直接定义一个变量 query_ result, 区分度很好; 再次, 类内变量以下划线结尾, 那么就可以直接传入同名的形参, 比如 TextQuery::TextQuery(std::string word) : word_ (word) {} , 其中 word_ 自然是类内私有成员.
8.注释:对那些临时的, 短期的解决方案, 或已经够好但仍不完美的代码使用 TODO 注释.
通过弃用注释(DEPRECATED comments)以标记某接口点已弃用.
注:详见谷歌开发指南