好的命名规则能极大地增加可读性和可维护性。同时,对于一个有上百个人共同完成的大项目来说,统一命名约定也是一项必不可少的内容。本章对程序中的所有标识符(包括命名空间、变量名、常量名、控件名、参数名、属性名、方法名、类名、接口等)的命名做出约定。
【规则1】标识符要采用英文单词或其组合,便于记忆和阅读,切忌使用汉语拼音来命名。 |
说明:标识符应当直观且可以拼读,可望文知义,避免使人产生误解。程序中的英文单词一般不要太复杂,用词应当准确。
【规则2】标识符只能由26个英文字母,10个数字,及下划线的一个子集来组成,并严格禁止使用连续的下划线,下划线也不能出现在标识符头或结尾(预编译开关除外)。 |
说明:这样做的目的是为了使程序易读。因为 variable_name 和 variable__name 很难区分,下划线符号‘_’若出现在标识符头或结尾,容易与不带下划线‘_’的标识符混淆。
【规则3】标识符的命名应当符合“min-length && max-information”原则。 |
说明:较短的单词可通过去掉“元音”形成缩写,较长的单词可取单词的头几个字母形成缩写,一些单词有大家公认的缩写,常用单词的缩写必须统一。协议中的单词的缩写与协议保持一致。对于某个系统使用的专用缩写应该在某处做统一说明。
正例:如下单词的缩写能够被大家认可:
temp 可缩写为
flag 可缩写为
statistic 可缩写为
increment 可缩写为
message
规定的常用缩写如下:
常用词 |
缩写 |
Argument |
Arg |
Buffer |
Buf |
Clear |
Clr |
Clock |
Clk |
Compare |
Cmp |
Configuration |
Cfg |
Context |
Ctx |
Delay |
Dly |
Device |
Dev |
Disable |
Dis |
Display |
Disp |
Enable |
En |
Error |
Err |
Function |
Fnct |
Hexadecimal |
Hex |
High Priority Task |
HPT |
I/O System |
IOS |
Initialize |
Init |
Mailbox |
Mbox |
Manager |
Mgr |
Maximum |
Max |
Message |
Msg |
Minimum |
Min |
Multiplex |
Mux |
Operating System |
OS |
Overflow |
Ovf |
Parameter |
Param |
Pointer |
Ptr |
Previous |
Prev |
Priority |
Prio |
Read |
Rd |
Ready |
Rdy |
Register |
Reg |
Schedule |
Sched |
Semaphore |
Sem |
Stack |
Stk |
Synchronize |
Sync |
Timer |
Tmr |
Trigger |
Trig |
Write |
Wr |
【规则4】采用应用领域相关的术语来命名。 |
说明:软件开发人员应注意软件用户的一些约定术语,不应当随意的创造术语,这会降低软件的易用性。
【规则5】程序中不要出现仅靠大小写区分的相似的标识符。 |
【规则6】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。 |
说明:下面是一些在软件中常用的反义词组。
add/remove ; begin/end ;
first/last ; get/release ; increment/decrement ; put/get ;
add/delete ; lock/unlock ; open/close ;
old/new ;
show/hide ;
up/down
【规则7】常量名都要使用大写字母, 用下划线 ‘_’ 分割单词。 |
正例:如 DISP_BUF_SIZE、MIN_VALUE、MAX_VALUE 等等。
【规则8】一般变量名不得取单个字符(如i、j、k等)作为变量名,局部循环变量除外。 |
说明:变量,尤其是局部变量,如果用单个字符表示,很容易出错(如l误写成1),而编译时又检查不出,则有可能增加排错时间。过长的变量名会增加工作量,会使程序的逻辑流程变得模糊,给修改带来困难,所以应当选择精炼、意义明确的名字,才能简化程序语句,改善对程序功能的理解。
【规则9】使用一致的前缀来区分变量的作用域。 |
说明:变量活动范围前缀规范如下:
m_
空
【规则10】使用一致的小写类型指示符作为前缀来区分变量的类型。 |
说明:常用变量类型前缀列表如下:
i
f
d
dcm
ch
l
bt
sbt
b
sht
usht
ul
ar
str
st
以上前缀可以进一步组合,在进行组合时,数组类型的前缀指示符必须放在变量类型前缀的首位。
【规则11】完整的变量名应由前缀+变量名主体组成,变量名的主体应当使用“名词”或者“形容词+名词”,且首字母必须大写。 |
说明:各种前缀字符可能组合使用,在这种情况下,各前缀顺序为:变量作用域前缀、变量类型前缀。
【规则12】控件命名应采用完整的英文描述符命名,名字的前缀是控件类型名缩写。 |
说明:
控件 |
缩写 |
Label |
lbl |
TextBox |
txt |
CheckBox |
chk |
Button |
btn |
ListBox |
lst |
DropDownList |
ddlst |
|
|
【规则13】参数名应由前缀+变量名主体组成,变量名的主体应当使用“名词”或者“形容词+名词”,且首字母必须大写。 |
说明:前缀为变量类型前缀。
【规则14】属性名用私有成员名称命名,但不带前缀,且首字母大写。 |
正例:
public class Hello
{
private string m_strName;
public string Name
{
get
{
return m_strName;
}
}
}
【规则15】方法名用大写字母开头的单词组合而成,且应当使用“动词”或者“动词+名词”(动宾词组)。 |
说明:方法名力求清晰、明了,通过方法名就能够判断方法的主要功能。方法名中不同意义字段之间不要用下划线连接,而要把每个字段的首字母大写以示区分。函数命名采用大小写字母结合的形式,但专有名词不受限制。
【规则16】To型方法:表示类型转换的方法一般用to开头。 |
说明:这些方法主要用来进行类型转换。
正例:
【规则17】遵循统一的规范来书写命名空间的声明,标识符用点号分隔开,且必须以ZTE开头。 |
说明:以ZTE开头,随后部分是系统、模块等。
【规则18】类名采用大小写结合的方法,构成类名的每个单词的首字母的首字母也必须大写。在构成类名的单词之间不用下划线。 |
说明:1.
2.
3.
- 在名字中,所有单词第一个字母大写。
【规则19】接口命名在名字前加上“I”前缀,其它和类命名规范相同。 |
〖建议1〗尽量避免名字中出现数字编号,如Value1、Value2等,除非逻辑上的确需要编号。 |
〖建议2〗标识符前最好不加项目、产品、部门的标识。 |
说明:这样做的目的是为了代码的可重用性。