程序中变量的命名方法
在写程序时,我们会经常使用变量,既然要使用,就要给变量起相应的名字,其实我们写程序,说白了就是为了赚钱(至少我这么认为,因为我的温饱问题都难以解决),这也就要求了我们写好的程序不仅仅自己能读懂,还要让别人读懂,这就要求我们对变量起名字时有一个规范.
hungarian(匈牙利命名)法就是目前比较流行的一种规范.用这种方法命名的变量显示了其数据类型。
匈牙利命名法有两种:
系统匈牙利命名法(前缀代表了变量的实际数据类型)和匈牙利应用命名法(不表示实际数据类型,而是给出了变量目的的提示,或者说它代表了什么)。
在这种命名方法中,一个变量名有一个或多个小写字母开头,这些字母有助于记忆变量的类型与用处,紧跟着就是程序员选择的任何名称.这个后半个部分的首字母可以大写以区别前面的类型指示符,即驼峰式大小写:
当变量名或函数名由两个或多个单词连接到一起,而构成唯一的标识符时,单词之间不用空格(如hello world).连接线(hello-world)和下划线(hello_world)连接,它有两种格式:小驼峰式命名法和大驼峰式命名法.
小驼峰式命名法:第一个单词以小写字母开始,第二个单词以大写字母开始.如helloWorld.
大驼峰式命名法:每一个单词的首字母都以大写开始.如HelloWorld.(Pascal命名法).
然而,我这里要说的是,虽然匈牙利命名法很流行,但大家还是不要使用的好,一切遵循微软的要求最好,
通用命名约定讨论的是如何为库元素选择最适当的名称。这些准则适用于所有标识符。后面各节讨论特定元素(如命名空间或属性)的命名。
请选择易读的标识符名称。例如,英文属性名称 HorizontalAlignment 比 AlignmentHorizontal 更具可读性。
可读性比简洁性更重要。属性名称 CanScrollHorizontally 比 ScrollableX(指 X 轴,但意义不明确)更好。
许多命名约定都与标识符的大小写有关。值得注意的是,公共语言运行库 (CLR) 支持区分大小写和不区分大小写的语言。本主题中描述的大小写约定可帮助开发人员理解和使用库。
下列术语描述了标识符的不同大小写形式。
Pascal 大小写
将标识符的首字母和后面连接的每个单词的首字母都大写。可以对三字符或更多字符的标识符使用 Pascal 大小写。例如:
BackColor
大小写混合
标识符的首字母小写,而每个后面连接的单词的首字母都大写。例如:
backColor
大写
标识符中的所有字母都大写。例如:
IO
如果标识符由多个单词组成,请不要在各单词之间使用分隔符,如下划线(“_”)或连字符(“-”)等。而应使用大小写来指示每个单词的开头。
下列准则是用于标识符的通用规则。
对于由多个单词组成的所有公共成员、类型及命名空间名称,要使用 Pascal 大小写。
注意,这条规则不适用于实例字段。由于成员设计准则中详细说明的原因,不应使用公共实例字段。
对参数名称使用大小写混合。
下表汇总了标识符的大小写规则,并提供了不同类型标识符的示例。
标识符 |
大小写方式 |
示例 |
---|---|---|
类 |
Pascal |
AppDomain |
枚举类型 |
Pascal |
ErrorLevel |
枚举值 |
Pascal |
FatalError |
事件 |
Pascal |
ValueChanged |
异常类 |
Pascal |
WebException |
只读的静态字段 |
Pascal |
RedValue |
接口 |
Pascal |
IDisposable |
方法 |
Pascal |
ToString |
命名空间 |
Pascal |
System.Drawing |
参数 |
Camel |
typeName |
属性 |
Pascal |
BackColor |
首字母缩写词是由术语或短语中各单词的首字母构成的单词。例如,HTML 是 Hypertext Markup Language 的首字母缩写。只有在公众广为认知和理解的情况下,才应在标识符中使用首字母缩写词。首字母缩写词不同于缩写词,因为缩写词是一个单词的缩写。例如,ID 是 identifier 的缩写。通常情况下,库名不应使用缩写词。
说明: |
---|
可在标识符中使用的两个缩写词是 ID 和 OK。在采用 Pascal 大小写格式的标识符中,这两个缩写词的大小写形式应分别为 Id 和 Ok。如果在采用大小写混合格式的标识符中将这两个缩写词用作首个单词,则它们的大小写形式应分别为 id 和 ok。 |
首字母缩写词的大小写取决于首字母缩写词的长度。所有首字母缩写词应至少包含两个字符。为了便于这些准则的实施,如果某一首字母缩写词恰好包含两个字符,则将其视为短型首字母缩写词。包含三个或三个以上字符的首字母缩写词为长型首字母缩写词。
下列准则为短型和长型首字母缩写词指定了正确的大小写规则。标识符大小写规则优先于首字母缩写词大小写规则。
两字符首字母缩写词的两个字符都要大写,但当首字母缩写词作为大小写混合格式的标识符的首个单词时例外。
例如,名为 DBRate 的属性是一个采用 Pascal 大小写格式的标识符,它使用短型首字母缩写词 (DB) 作为首个单词。又如,名为 ioChannel 的参数是一个采用大小写混合格式的标识符,它使用短型首字母缩写词 (IO) 作为首个单词。
包含三个或三个以上字符的首字母缩写词只有第一个字符大写,但当首字母缩写词作为大小写混合格式的标识符的首个单词时例外。
例如,名为 XmlWriter 的类是一个采用 Pascal 大小写格式的标识符,它使用长型首字母缩写词作为首个单词。又如,名为 htmlReader 的参数是一个采用大小写混合格式的标识符,它使用长型首字母缩写词作为首个单词。
如果任何首字母缩写词位于采用大小写混合格式的标识符开头,则无论该首字母缩写词的长度如何,都不大写其中的任何字符。
例如,名为 xmlStream 的参数是一个采用大小写混合格式的标识符,它使用长型首字母缩写词 (xml) 作为首个单词。又如,名为 dbServerName 的参数是一个采用大小写混合格式的标识符,它使用短型首字母缩写词 (db) 作为首个单词。
不要将所谓的紧凑格式复合词中的每个单词都大写。这种复合词是指写作一个单词的复合词,如“endpoint”。
例如,hashtable 是一个紧凑格式的复合词,应将其视为一个单词并相应地确定大小写。如果采用 Pascal 大小写格式,则该复合词为 Hashtable;如果采用大小写混合格式,则该复合词为 hashtable。若要确定某个单词是否是紧凑格式的复合词,请查阅最新的词典。
下表列出了不是紧凑格式复合词的一些常用术语。术语先以 Pascal 大小写格式显示,后面的括号中的是其大小写混合格式。
-
BitFlag (bitFlag)
-
FileName (fileName)
-
LogOff (logOff)
-
LogOn (logOn)
-
SignIn (signIn)
-
SignOut (signOut)
-
UserName (userName)
-
WhiteSpace (whiteSpace)
大小写准则只是为了使标识符更易于阅读和辨认。不能将大小写规则用作避免库元素之间的命名冲突的手段。
不要假定所有编程语言都区分大小写。事实并非如此。不能仅凭大小写区分名称。
不要使用下划线、连字符或任何其他非字母数字字符。
不要使用匈牙利表示法。
匈牙利表示法是在标识符中使用一个前缀对参数的某些元数据进行编码,如标识符的数据类型。
避免使用与常用编程语言的关键字冲突的标识符。
虽然符合 CLS 的语言必须提供将关键字用作普通字的方法,最佳做法不要求强制开发人员了解如何实现。对于大多数编程语言,语言参考文档都会提供语言所使用的关键字列表。下表提供了某些常用编程语言的参考文档的链接。
语言 |
链接 |
---|---|
C# |
|
C++ |
|
Visual Basic |
通常,不应使用缩写或首字母缩写词。这类名称的可读性较差。同样,要确定某个首字母缩写词是否已受到广泛认可也是很困难的。
有关缩写的大小写规则,请参见首字母缩写词的大小写规则。
不要将缩写或缩略形式用作标识符名称的组成部分。
例如,使用 OnButtonClick 而不要使用 OnBtnClick。
除非必要,不要使用任何未被广泛接受的首字母缩写词。
对于类型名称,应使用语义上有意义的名称而不要使用语言特定的关键字。例如,名称 GetLength 比 GetInt 更好。
在标识符的语义含义仅限于其类型的极少数情况下,应使用一般公共语言运行时 (CLR) 类型名称,而不要使用语言特定的名称。
例如,将数据转换为 Int16 的方法应命名为 ToInt16 而不是 ToShort,因为 Short 是 Int16 的语言特定的类型名称。
下表显示的是公共编程语言和 CLR 的相应语言特定的类型名称。
C# 类型名称 |
Visual Basic 类型名称 |
JScript 类型名称 |
Visual C++ 类型名称 |
Ilasm.exe 表示形式 |
CLR 类型名称 |
---|---|---|---|---|---|
sbyte |
SByte |
sByte |
char |
int8 |
SByte |
byte |
Byte |
byte |
unsigned char |
unsigned int8 |
Byte |
short |
Short |
short |
short |
int16 |
Int16 |
ushort |
UInt16 |
ushort |
unsigned short |
unsigned int16 |
UInt16 |
int |
Integer |
int |
int |
int32 |
Int32 |
uint |
UInt32 |
uint |
unsigned int |
unsigned int32 |
UInt32 |
long |
Long |
long |
__int64 |
int64 |
Int64 |
ulong |
UInt64 |
ulong |
unsigned __int64 |
unsigned int64 |
UInt64 |
float |
Single |
float |
float |
float32 |
Single |
double |
Double |
double |
double |
float64 |
Double |
bool |
Boolean |
boolean |
bool |
bool |
Boolean |
char |
Char |
char |
wchar_t |
char |
Char |
string |
string |
string |
string |
string |
string |
object |
Object |
object |
Object |
object |
Object |
在标识符没有语义含义且参数的类型不重要的极少数情况下,应使用通用名称(如值或项),而不要重复类型名称。