Google 开源项目命名约定

原本以为Google对开源项目的命名规范类似于Unix中常见的命名方式,采用小写词组加下划线方式,看完Google开源项目命名约定之后,真心表示我知道的太少了。

总述:通用命名方面,Google追求简单、但是易于理解的命名,比如:

//正确的命名规范示例:
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;              // 删减了若干字母.

一、对于文件命名,则采用Unix经典的命名方式,全部小写加下划线(推荐)/连字符加以分割。并要求C++文件以.cc结尾,头文件以.h结尾,文本型补充文件以.inc结尾,同时不要使用/usr/include中的文件名。

如:my_useful_class.ccmy-useful-class.ccmyusefulclass.cc都属于可被接受的范围。

二、类的命名方面,要求名称中每个单词首字母均大写, 不包含下划线。

如:MyExcitingClassMyExcitingEnum都属于可被接受的范围。

三、变量的命名,变量 (包括函数参数) 和数据成员名一律小写, 单词之间用下划线连接。类的成员变量以下划线结尾, 但结构体的就不用, 如: a_local_variable, a_struct_data_member, a_class_data_member_

以下给出示例:

普通变量:

string table_name;  // 好 - 用下划线.
string tablename;   // 好 - 全小写.
string tableName;   // 差 - 混合大小写

类成员:记得加下划线(很不理解Google为什么这样要求)

class TableInfo {
  ...
 private:
  string table_name_;  // 好 - 后加下划线.
  string tablename_;   // 好.
  static Pool<TableInfo>* pool_;  // 好.
};

对于结构体要求则宽松的多,不必须加下划线,下面的写法都是被允许的。

struct UrlTableProperties {
  string name;
  int num_entries;
  static Pool<UrlTableProperties>* pool;
};

四、函数命名

常规函数使用大小写混合, 取值和设值函数则要求与变量名匹配: MyExcitingFunction(), MyExcitingMethod(), my_exciting_member_variable(), set_my_exciting_member_variable()。对于首字母缩写的单词, 更倾向于将它们视作一个单词进行首字母大写 (例如, 写作StartRpc()而非StartRPC()).

命名示例:

AddTableEntry()
DeleteUrl()
OpenFileOrDie()

结尾:在Google眼里,命名规范都是一种学问。。。

分享