代码命名规范参考_网络摘抄

变量命名规范


本节内容主要参考自代码大全(第二版)

1、变量命名的注意事项

  • 变量命名最关键的一点就是:名字要能准确的描述出该变量所代表的事物
  • 变量名长度最好控制在10~16个字符之间
  • 对位于全局命名空间中的名字加以限定词,并且应该一般加在后面
    • 常见的限定词:Total, Sum, Average, Max, Min, Record, String, Pointer
    • Num比较特殊,加在前面表示总数,加在后面表示下标。不过为了避免混淆,总数最好用Total/Count来表示,下标用Index来表示
  • 准确使用对称词,如first/last

举一些例子:

变量用途 变量名称 备注
支票累计额 checkTotal
列车速度 velocity
每页行数 linesPerPage
员工序号 customerIndex 优于customerNum
员工总数 customerTotal 优于numCustomers(复数)

2、特定类型的数据命名

2.1循环下标命名

  • 循环内常用 i, j, k做下标,且仅用于此处
  • 如果一个变量要在循环之外使用,要以具体的意义去命名,比如统计读取记录的数量,应当使用recordCount
  • 嵌套循环最好以实际意义来命名下标,如扫描矩阵用row, column

2.2状态变量命名

  • 不要使用flag,应当明确指出具体状态,如用dataReady表示数据已经准备好了
  • 当一个状态变量表示多个状态时,有时需要进行操作,有时候也需要进行比较,结合枚举类型或者预定义常量来使用,如characterType & PRINTABLE_CHAR

2.3临时变量命名

  • 尽量使用的“临时变量”的具体意义命名,而不是使用temp,要清楚该变量所代表数据的实际用途

2.4布尔变量命名

  • 记住典型的布尔变量名
    • done,某事已完成
    • error,错误有发生
    • found,某值已找到
    • success/ok,某项操作成功,最好能更具体的表示是什么操作
  • 布尔变量的名称应当只有truefalse的含义,如sex就比male差很多
  • 使用肯定意义的布尔变量名,如notFound就比found差很多

2.5枚举类型命名

  • 使用前缀,其一般为枚举类型名称
1.  enum Color
2.  {
3.      Color_Red,
4.      Color_Green,
5.      Color_Blue
6.  }

2.6常量命名

  • 全部大写+下划线
  • 使用常量的意义命名,而不是数值
  • 推荐使用const定义常量,而不是#define

3、非正式命名规则

  • 此处列出C++和Java命名规则的部分示例,这些都是笔者用起来非常舒服规则
实体 描述
localVariable 局部变量,首字母小写,其余单词首字母大写
g_globalVariable 全局变量,使用g_前缀
funtion_name 函数/方法,全部小写,单词之间用下划线隔开
TypeName 类型定义,Camel写法,包括枚举和typedef,枚举总是复数形式
Base_Enum 枚举类型元素,加上单数枚举类型前缀,Color_Red
ClassName 类名,Camel写法,每个单词首字母大写,其余字母小写
m_classVariable 类成员变量,使用前缀m_
CONSTANT 常量,全部大写 + 下划线
MACRO 常量,全部大写 + 下划线

4、缩写规则

  • 有标准缩写的要使用标准缩写,如degree缩写为degdeletedel
  • 去掉非前置元音
  • 去掉虚词
  • 统一的在第n个字母后阶段,如xPoxyPos中的Pos表示都是Position

5、应该避免的名字

  • 不要使用中文拼音甚至是拼音缩写
  • 避免使用令人误解的名字或者缩写
  • 避免使用具有相似含义的名字,如fileNumfileIndex
  • 避免使用拼写相似的名字
  • 避免在名字中使用数字,一般都可以转化为数组或者容器
  • 避免使用大小写区分变量
  • 避免使用易混淆的字符,如字母O/o和数字0,字母l和数字1,字母I和数字1

总结

  • 变量命名最重要是就是要能体现其具体的意义
  • 变量名要方便阅读,不能太长也不能太短
  • 要形成自己的编码风格,一眼看过去就知道该名字代表是什么数据类型
  • 作为中国人,最经常犯的错误就是使用拼音及其缩写命名。笔者曾见过有人用MBPos表示面板位置,用T6表示机械臂第6个关节的坐标矩阵,看起来非常的吃力,包括他自己都经常忘记这些变量的具体含义

============================================
1.变量名只能是字母(A-Z,a-z)、数字(0-9)或下划线。

2.第一个字母不能是数字,例如2Lerver这不是一个合法的C++变量。

3.不能是c++关键字,例如不能用class这个单词来命名一个变量。

4.区分大小写,例如iA和ia是两个不同的变量。
理论上,在遵守了上面几条规则的前提下,所声明的变量名称都是合法的。比如下面的命名:
char xueshengming[20]; //学生名
char a; //命名一个字符,但变量名毫无意义

这样的变量命名尽管是合法的,但可读性非常差。正规的软件公司,对于变量命名往往都有自己的一个推荐规范。不同公司的规范又会有一些差别。当一个程序员从一个公司跳槽到另一个公司,甚至会出现不习惯新公司代码规范的现象。
万事万物,要是有一个统一的规范,也许程序员这个行业会少一些烦恼。俗话说得好:没有规矩,不成方圆。以下是笔者多年编码得出的变量命名的心得体会,在此总结如下,并奢望有招一日能成为行业规范。
变量命名的宗旨:

一、用最短的字符表示最多的意义。
int iPosX; //Pos表示位置,X表示横坐标 //个人比较喜欢用n做前缀

二、使用变量前缀

在变量前带上小写前缀可以很直观的看出变量的数据类型,而不必到变量的定义处去查看。常用的数据类型推荐变量前缀:

1.整型的前缀
short sValue; //s为short的前缀 int iAge; //i为int的前缀
unsigned int uiAge; //ui为unsigned int的前缀(两个单词的首字母) //也有用u做前缀的
long lValue; //l为long的前缀 2.浮点型的前缀
float fScore; //f为float的前缀

1.变量名只能是字母(A-Z,a-z)、数字(0-9)或下划线。

2.第一个字母不能是数字,例如2Lerver这不是一个合法的C++变量。

3.不能是c++关键字,例如不能用class这个单词来命名一个变量。

4.区分大小写,例如iA和ia是两个不同的变量。

理论上,在遵守了上面几条规则的前提下,所声明的变量名称都是合法的。比如下面的命名:
char xueshengming[20]; //学生名
char a; //命名一个字符,但变量名毫无意义

这样的变量命名尽管是合法的,但可读性非常差。正规的软件公司,对于变量命名往往都有自己的一个推荐规范。不同公司的规范又会有一些差别。当一个程序员从一个公司跳槽到另一个公司,甚至会出现不习惯新公司代码规范的现象。
万事万物,要是有一个统一的规范,也许程序员这个行业会少一些烦恼。俗话说得好:没有规矩,不成方圆。以下是笔者多年编码得出的变量命名的心得体会,在此总结如下,并奢望有招一日能成为行业规范。
变量命名的宗旨:

一、用最短的字符表示最多的意义。
int iPosX; //Pos表示位置,X表示横坐标 //个人比较喜欢用n做前缀 二、使用变量前缀
在变量前带上小写前缀可以很直观的看出变量的数据类型,而不必到变量的定义处去查看。常用的数据类型推荐变量前缀:

1.整型的前缀
short sValue; //s为short的前缀 int iAge; //i为int的前缀
unsigned int uiAge; //ui为unsigned int的前缀(两个单词的首字母) //也有用u做前缀的
long lValue; //l为long的前缀

2.浮点型的前缀
float fScore; //f为float的前缀
double dValue; //d为double的前缀

3.字符型的前缀
char cChar; //c为char的前缀 //个人喜欢用a做前缀
TCHAR tcChar //多字节字符和Unicode字符兼容类型的前缀tc wchar_t wcChar //宽字符前缀wc

4.字符串的前缀
char szName[30]; //sz为C语言字符串的前缀 string strName; //str为C++字符串变量的前缀 CString strInfo; //str为MFC字符串变量的前缀

5.布尔型的前缀
bool bPass; //b为bool的前缀

6.指针型的前缀
int *pValue; //p为指针的前缀
说明:由于指针是指向一定数据类型的变量,因此p后面要不要再加一个前缀一直让我举棋不定。如果再加上前缀比如: int * piKey;
char * pszInfo;
这样似乎意义更完整,但势必会增加变量的字符长度。因此,这里就不硬性规定了。但是,指针变量以p开头应该是雷也打不动的。

7.数组的前缀 int arrNum[10]; //arr为数组的前缀

说明:和指针变量一样,arr后是否再加数组元素的数据类型前缀取决于你自己。 string arrstrName[3]; //C++字符串数组,加上去似乎很别扭

8.枚举变量的前缀
enum emWeek; //em为枚举变量的前缀

9.结构变量的前缀:t
T_NODE tNode; //结构名称以T_开头 10.字节变量的前缀:by BYTE byInfo;

10.字节变量的前缀:by BYTE byInfo;

11.字变量的前缀
DWORD dwInfo; //双字 WORD wInfo; //单字

12.字符指针的前缀
LPCTSTR ptszInfo; //ptsz表示前缀,t表示TCHAR类型 LPCSTR pszInfo; LPSTR pszInfo;

13.STL容器类型前缀 vector vecValue;
说明:vec表示vector容器的前缀,为了简化变量,变量体后面不再使用前缀 list lstInfo;

14.MFC绑定控件变量的前缀
CEdit m_ctlName; //对象变量,变量体前统一用ctl表示 //个人喜欢用m_ctrl
int m_iAge; //值变量,变量体有表示值数据类型的前缀
说明:由于长短指针在32位操作系统后已无区别,所以不再区分,一律以p开头,这也与指针变量以p开头的原则贴得更近。

15.矩形结构的前缀:rc RECT rcClient; CRect rcWin;

16.句柄对象一律以h开头 HWND hWndName; HBRUSH hBr; HPEN hPen; HBITMAP hBmpBack;

17.windows颜色类型的前缀:cr COLORREF crFront;

18.windows中DC(设备上下文)类型的前缀 CClientDC dcClient;

三、类的成员变量以m_开头,后面为变量体,变量体依然要有前缀。

int m_iDepth;

四、定义一个变量,为了简化,在不影响变量意义的情况下,可以仅仅使用前缀。 RECT rc;

五、全局变量一律以g_开头,后面为变量体,变量体依然要有前缀。 int g_iNums;

六、定义结构体为了保证和C语言和C++的写法兼容性,一律采用typedef语句。 typedef struct tagINFO_NODE {
int iData;
tagINFO_NODE *pNext; }T_INFO_NODE, *PT_INFO_NODE;

七、变量体如果是多个单词,每个单词的首字母大写。 int iStudentAge;

八、在意义明确的情况下可以仅仅使用首字母命名变量可以缩短变量名。 int iID;
说明:仅使用首字母表示变量体的前提是保证变量的意义,比如变量iStudentAge如果声明成:
int iSA; //这样将失去意义,不可取

九、定义一个类使用C作为类名的前缀。 class CStudent { … };

引用:https://blog.csdn.net/u012314708/article/details/52130961

==========================================

1. 驼峰命名法

1.1 小驼峰法

除第一个单词之外,其他单词首字母大写(常用于变量)

`int myStudentNumber` 

1.2 大驼峰法(帕斯卡命名法)

每一个单词的首字母都采用大写字母(常用语类名,函数名,属性,命名空间)

`class StudentFamily` 

2. 匈牙利命名法

变量名=属性+类型+对象描述,这样做的好处是使程序员第一眼看到变量时就对变量的类型和其它属性有直观的了解。

2.1 匈牙利命名法 - 属性

`全局变量 g_
常量 c_
成员变量 m_
静态变量 s_` 

2.2 匈牙利命名法 - 类型

`指针 p
函数 fn
无效 v
句柄 h
长整型 l
布尔 b
浮点型 f
双字 dw
字符串 sz
短整型 n
双精度浮点 d
计数 c(通常用cnt)
字符 ch(通常用c)
整型 i(通常用n)
字节 by 字 w
实型 r
无符号 u` 

2.3 匈牙利命名法 - 描述

`最大 Max
最小 Min
初始化 Init
临时变量 T(或Temp)
源对象 Src
目的对象 Dest` 

3. 下划线命名法

所有字母均小写,每个单词间以下划线分割

`int student_number` 

4. 实例

`m_iMyData 是一个匈牙利命名法,m_表示它是成员变量,小写的i说明了它是个整型,后面的和帕斯卡命名相同,指示了该变量的用途

  myData 是一个骆驼命名法,它第一个单词的第一个字母小写,后面的单词首字母大写,看起来像一个骆驼

  MyData 就是一个帕斯卡命名的示例

  my_data 是一个下划线命名的示例` 
【完】

你可能感兴趣的:(计算机基础,开发语言)