google编码规范——Naming

来源:互联网 发布:上海市数据交易中心 编辑:程序博客网 时间:2024/04/30 22:34


General Naming Rules

 

函数名,变量名和文件名应该是描述性的,要避免缩写。类型和变量应该是名词,函数名应该是带有命令式的动词。

How to Name

   尽可能给出一个描述性的合理的名字。不要担心节省水平空间,因为这并远远不及使得你的代码让新读者容易读懂重要。以下都是好的命名:

int num_errors;                  // Good.

int num_completed_connections;   // Good.

不好的命名用了不传递任何含义的模糊的缩写或者任意的字符。

int n;                           // Bad -meaningless.

int nerr;                        // Bad - ambiguousabbreviation.

int n_comp_conns;                // Bad - ambiguous abbreviation.

类型和变量名通常应该是名词,例如,FileOpener, num_errors.

函数名通常应该是带有命令式的:例如,OpenFile(), set_num_errors()。取值函数例外。

 

Abbreviations

不要用缩写,除非它们是众所周知的。例如:

// Good

// These show proper names with noabbreviations.

int num_dns_connections;  // Most people know what "DNS"stands for.

int price_count_reader;   // OK, price count. Makes sense.

// Bad!

// Abbreviations can be confusing orambiguous outside a small group.

int wgc_connections;  // Only your group knows what this standsfor.

int pc_reader;        // Lots of things can be abbreviated"pc".

不要用省掉字母的缩写方式:
int error_count;  // Good.

int error_cnt;    // Bad.


File Names

文件名应该是都是小写,可以包含下划线(_)或者破折号(-)。按照你的项目中使用的惯例。如果没有一致的模式,最好用“_”.。

 

 

以下例子都是可以接收的文件名:

 

my_useful_class.cc
my-useful-class.cc
myusefulclass.cc
myusefulclass_test.cc // _unittest and _regtest are deprecated.

 

C++源文件应该是 .cpp,头文件应该是 .h结尾。

不要用存在 于/usr/include中的文件名,如 db.h。

一般的,你的文件名应该是很具体。例如,用http_server_logs.h 而不是 logs.h。通常情况下是有成对的文件,如用foo_bar.h和foo_bar.cpp定义类FooBar。

内联函数必须是房子 .h文件。如果你的内联函数很短,可以直接放在 .h文件。然而,如果你的内联函数有很多代码,则应该放在以–inl.h结尾的第三个文件。如果一个类有很多内联代码,则你的类应该有三个文件:

url_table.h      // The class declaration.

url_table.cc     // The class definition.

url_table-inl.h  // Inline functions that include lots ofcode.


Type Names

     类型名开头和每个新单词的首字母为大写,而且不带下划线:MyExcitingClass, MyExcitingEnum.

所有类型名:class,struct,typedefs和enum都有相同的命名规则。类型名开头和每个新单词的首字母应该为大写,而且不带下划线

// classes and structs

class UrlTable { ...

class UrlTableTester { ...

struct UrlTableProperties { ...

 

// typedefs

typedef hash_map<UrlTableProperties *,string> PropertiesMap;

 

// enums

enum UrlTableErrors { ...


Variable Names

    变量名都是小写的,而且单词之间用下划线连接。类成员变量有末尾的下划线。my_exciting_local_variable  ,my_exciting_member_variable_.

 

常见的变量名:

例如:

string table_name;  // OK - uses underscore.

string tablename;   // OK - all lowercase.

string tableName;   // Bad - mixed case.

 

类数据成员:

   数据成员都是小写,可以有选择的像普通的变量名带下划线,但是总是带末尾的下划线。

string table_name_;  // OK - underscore at end.

string tablename_;   // OK.

 

结构变量:

结构体数据成员名应该像普通的变量名一样,不像类成员那样带末尾下划线。

struct UrlTableProperties

 {

 string name;

  intnum_entries;

}

全局变量:

   对于在任何情况下都很少出现的全局变量没有特别的需求, 如果你需要用全局变量,可以用  g_ 前缀或者其他可以很容易与局部变量区别的标记。

 

Constant Names 

用k开头,后面跟着混合大小写的名字:kDaysInAWeek.

所有编译时常量,不管是局部的,全局的,或者是类成员,遵循一个与其他变量稍微不同的命名规则。用k开头,后面跟着首字母是大写的单词。

const int kDaysInAWeek = 7;


Function Names 

正规的函数名是大小写混合的,变量的存取函数与变量名相匹配:MyExcitingFunction(), MyExcitingMethod(), my_exciting_member_variable(),set_my_exciting_member_variable().

Regular Functions

  函数名的首字母和每个单词的首字母也是大写,并且没有下划线。

如果函数可能在发生错误的地方崩溃,你应该在函数名后面加OrDie,,这只用在正常操作时可能出现错误的函数。

 

AddTableEntry()

DeleteUrl()

OpenFileOrDie()

Accessors and Mutators

访问和赋值函数名应该和它们获取或设置值的变量名匹配。

class MyClass {

 public:

  ...

  intnum_entries() const { return num_entries_; }

 void set_num_entries(int num_entries) { num_entries_ = num_entries; }

 

 private:

  intnum_entries_;

};

对于其他很简短的内联函数名你也可能用小写。例如,如果一个函数代价不高,当你在循环里调用它可能不存在值,那么用小写字母的函数名是可以接受。


Namespace Names

命名空间名字都是小写,并且一句项目名和项目目录结构:google_awesome_project


Enumerator Names

枚举名要么像常量,要么像宏一样: kEnumName 或 ENUM_NAME

最好,单独的枚举命名应该跟常量一样。然而,跟宏命名一样也是可以接受的。枚举名 ,UrlTableErrors,是一个类型,所以大小写混合。

enum UrlTableErrors {

  kOK= 0,

 kErrorOutOfMemory,

 kErrorMalformedInput,

};

enum AlternateUrlTableErrors {

  OK= 0,

 OUT_OF_MEMORY = 1,

 MALFORMED_INPUT = 2,

};

直到2009年1月,枚举值命名风格还是跟宏一样。这引起了枚举值和宏的命名冲突。因此,形成一致的命名风格还在实施中。新的代码应尽可能用不变的命名风格。然而,也没有理由改变旧的代码用新的命名风格,除非就的名字实在引发了编译问题。


Macro Names

你不是真的需要定义一个宏。如果真的需要,可以像这样定义: MY_MACRO_THAT_SCARES_SMALL_CHILDREN

   通常不应该用宏。然而,如果绝对需要,宏名应该是由大写字母和下划线组成。

#define ROUND(x) ...

#define PI_ROUNDED 3.0


Exceptions to Naming Rules

如果你定义一个和已经存在的C或者C++实体类似的实体,你可以遵循已经存在的实体的命名方式。

bigopen()

function name, follows form of open()

uint

typedef

bigpos

struct or class, follows form of pos

sparse_hash_map

STL-like entity; follows STL namingconventions

LONGLONG_MAX

a constant, as in INT_MAX