当前位置:天才代写 > tutorial > C语言/C++ 教程 > Google C++编程气势气魄指南(五):定名约定

Google C++编程气势气魄指南(五):定名约定

2017-11-04 08:00 星期六 所属: C语言/C++ 教程 浏览:487

副标题#e#

1.总体法则:不要随意缩写;2.宏、列举等利用全部大写+下划线;3.变量(含类、布局体成员变量)、文件、定名空间、存取函数等利用全部小写+下划线,类成员变量以下划线末了,全局变量以g_开头;4.参考现有或临近定名约定……

定名约定

最重要的一致性法则是定名打点,定名气势气魄直接可以直接确定数名实体是:范例、变量、函数、常量、宏等等,无需查找实体声明,我们大脑中的模式匹配引擎依赖于这些定名法则。

定名法则具有必然随意性,但对比按小我私家爱好定名,一致性更重要,所以不管你怎么想,法则总归是法则。

1.通用定名法则(General Naming Rules)

函数定名、变量定名、文件定名应具有描写性,不要太过缩写,范例和变量应该是名词,函数名可以用“呼吁性”动词。

如何定名:

尽大概给出描写性名称,不要节省空间,让别人很快领略你的代码更重要,好的定名选择:

int num_errors; // Good.

int num_completed_connections; // Good.

丑恶的定名利用恍惚的缩写或随意的字符:

int n; // Bad - meaningless.
int nerr; // Bad - ambiguous abbreviation.
int n_comp_conns; // Bad - ambiguous abbreviation.

范例和变量名一般为名词:如FileOpener、num_errors。

函数名凡是是指令性的,如OpenFile()、set_num_errors(),会见函数需要描写的更细致,要与其会见的变量相吻合。

缩写:

除非放到项目外也很是明白,不然不要利用缩写,譬喻:

// Good
// These show proper names with no abbreviations.
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 or ambiguous outside a small group.
int wgc_connections; // Only your group knows what this stands for.
int pc_reader; // Lots of things can be abbreviated "pc".

不要用省略字母的缩写:

int error_count; // Good.int error_cnt; // Bad.

2.文件定名(File Names)

文件名要全部小写,可以包括下划线(_)或短线(-),按项目约定来。

可接管的文件定名:

my_useful_class.cc
my-useful-class.cc
myusefulclass.cc

C++文件以.cc末了,头文件以.h末了。

不要利用已经存在于/usr/include下的文件名(译者注,对UNIX、Linux等系统而言),如db.h。

凡是,只管让文件名越发明晰,http_server_logs.h就比logs.h要好,界说类时文件名一般成对呈现,如foo_bar.h和foo_bar.cc,对应类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 of code.

参考第一篇-inl.h文件一节。


#p#副标题#e#

3.范例定名(Type Names)

范例定名每个单词以大写字母开头,不包括下划线:MyExcitingClass、MyExcitingEnum。

所有范例定名——类、布局体、范例界说(typedef)、列举——利用沟通约定,譬喻:

// classes and structs
class UrlTable { ...
class UrlTableTester { ...
struct UrlTableProperties { ...
// typedefs
typedef hash_map<UrlTableProperties *, string> PropertiesMap;
// enums
enum UrlTableErrors { ...

4.变量定名(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.

类数据成员:

布局体的数据成员可以和普通变量一样,不消像类那样接下划线:

struct UrlTableProperties {
string name;
int num_entries;
}

布局体与类的接头参考第三篇布局体vs.类一节。

全局变量:

对全局变量没有出格要求,罕用就好,可以以g_或其他易与局部变量区分的符号为前缀。

5.常量定名(Constant Names)

在名称前加k:kDaysInAWeek。

所有编译时常量(无论是局部的、全局的照旧类中的)和其他变量保持些许区别,k后接大写字母开头的单词:

const int kDaysInAWeek = 7;

#p#副标题#e#

6.函数定名(Function Names)

普通函数(regular functions,译者注,这里与会见函数等非凡函数相对)巨细写殽杂,存取函数(accessors and mutators)则要求与变量名匹配:MyExcitingFunction()、MyExcitingMethod()、my_exciting_member_variable()、set_my_exciting_member_variable()。

普通函数:

函数名以大写字母开头,每个单词首字母大写,没有下划线:

AddTableEntry()

DeleteUrl()

存取函数:

存取函数要与存取的变量名匹配,这儿摘录一个拥有实例变量num_entries_的类:

#p#分页标题#e#

class MyClass {
public:
...
int num_entries() const { return num_entries_; }
void set_num_entries(int num_entries) { num_entries_ = num_entries; }
private:
int num_entries_;
};

其他短小的内联函数名也可以利用小写字母,譬喻,在轮回中挪用这样的函数甚至都不需要缓存其值,小写定名就可以接管。

译者注:从这一点上可以看出,小写的函数名意味着可以直接内联利用。

7.定名空间(Namespace Names)

定名空间的名称是全小写的,其定名基于项目名称和目次布局:google_awesome_project。

关于定名空间的接头和如何定名,参考第二篇定名空间。

8.列举定名(Enumerator Names)

列举值应全部大写,单词间以下划线相连:MY_EXCITING_ENUM_VALUE。

列举名称属于范例,因此巨细写殽杂:UrlTableErrors。

enum UrlTableErrors {
OK = 0,
ERROR_OUT_OF_MEMORY,
ERROR_MALFORMED_INPUT,
};

9.宏定名(Macro Names)

你并不规划利用宏,对吧?假如利用,像这样:MY_MACRO_THAT_SCARES_SMALL_CHILDREN。

参考第四篇预处理惩罚宏,凡是是不利用宏的,假如绝对要用,其定名像列举定名一样全部大写、利用下划线:

#define ROUND(x) ...
#define PI_ROUNDED 3.0
MY_EXCITING_ENUM_VALUE

#p#副标题#e#

10.定名法则破例(Exceptions to Naming Rules)

当定名与现有C/C++实体相似的工具时,可参考现有定名约定:

bigopen()
函数名,参考open()
uint
typedef范例界说
bigpos
struct或class,参考pos
sparse_hash_map
STL相似实体;参考STL定名约定
LONGLONG_MAX
常量,雷同INT_MAX

______________________________________

译者:定名约定就相对轻松很多,在遵从代码一致性、可读性的前提下,略显随意:

1.总体法则:不要随意缩写,假如说ChangeLocalValue写作ChgLocVal尚有情可原的话,把ModifyPlayerName写作MdfPlyNm就过分度了,除函数名可适当为动词外,其他定名只管利用清晰易懂的名词;

2.宏、列举等利用全部大写+下划线;

3.变量(含类、布局体成员变量)、文件、定名空间、存取函数等利用全部小写+下划线,类成员变量以下划线末了,全局变量以g_开头;

4.普通函数、范例(含类与布局体、列举范例)、常量等利用巨细写殽杂,不含下划线;

5.参考现有或临近定名约定。

 

    关键字:

天才代写-代写联系方式