除了对象之外,常量和变量也需要良好格式的命名约定。本节列出了 Visual Basic 支持的常量和变量的推荐约定。并且讨论标识数据类型和范围的问题。
变量应该总是被定义在尽可能小的范围内。全局 (Public) 变量可以导致极其复杂的状态机构,并且使一个应用程序的逻辑非常难于理解。全局变量也使代码的重用和维护更加困难。
Visual Basic 中的变量可以有下列范围:
范围 | 声明位置 | 可见位置 |
过程级 | 过程,子过程或函数过程中的 ‘Private’ | 在声明它的过程中 |
模块级 | 窗体或代码模块(.frm、.bas )的声明部分中的 ‘Private’ | 窗体或代码模块中的每一个过程 |
全局 | 代码模块(.bas)的声明部分中的 ‘Public’ | 应用程序中的每一处 |
在 Visual Basic 的应用程序中,只有当没有其它方便途径在窗体之间共享数据时才使用全局变量。当必须使用全局变量时,在一个单一模块中声明它们,并按功能分组。给这个模块取一个有意义的名称,以指明它的作用,如 Public.bas。
较好的编码习惯是尽可能写模块化的代码。例如,如果应用程序显示一个对话框,就把要完成这一对话任务所需要的所有控件和代码放在单一的窗体中。这有助于将应用程序的代码组织在有用的组件中,并减小它运行时的开销。
除了全局变量(应该是不被传递的),过程和函数应该仅对传递给它们的对象操作。在过程中使用的全局变量应该在过程起始处的声明部分中标识出来。此外,应该用 ByVal 将参数传递给 Sub 过程及 function 过程,除非明显地需要改变已传递的参数值。
随着工程大小的增长,划分变量范围的工作也迅速增加。在类型前缀的前面放置单字母范围前缀标明了这种增长,但变量名的长度并没有增加很多。
范围 | 前缀 | 例子 |
全局 | g | gstrUserName |
模块级 | m | mblnCalcInProgress |
本地到过程 | 无 | dblVelocity |
如果一个变量在标准模块或窗体模块中被声明为 Public,那么该变量具有全局范围。如果一个变量在标准模块或窗体模块中被分别声明为 Private,那么该变量有模块级范围。
注意一致性是卓有成效地使用这种技术的关键;
Visual Basic
中的语法检查器不会捕捉以"p."
开头的模块级变量。
常量名的主体是大小写混合的,每个单词的首字母大写。尽管标准 Visual Basic 常量不包含数据类型和范围信息,但是象 i、s、g 和 m 这样的前缀对于理解一个常量的值和范围还是很有用的。对于常量名,应遵循与变量相同的规则。例如:
mintUserListMax '
对用户列表的最大限制'(
整数值,本地到模块)
gstrNewLine '
新行字符'(
字符串,应用程序全局使用)
声明所有的变量将会节省编程时间,因为键入操作引起的错误减少了(例如,究竟是 aUserNameTmp,还是 sUserNameTmp,还是 sUserNameTemp)。在“选项”对话框的“编辑器”标签中,复选“要求变量声明”选项。Option Explicit 语句要求在 Visual Basic 程序中声明所有的变量。
应该给变量加前缀来指明它们的数据类型。而且前缀可以被扩展,用来指明变量范围,特别是对大型程序。
用下列前缀来指明一个变量的数据类型。
数据类型 | 前缀 | 例子 |
Boolean | bln | blnFound |
eanB | byt | bytRasterData |
nByteCollection o | col | colWidgets |
ection o | cur | curRevenue |
on objectCu | dtm | dtmStart |
ectCur | dbl | dblTolerance |
Curre | err | errOrderNum |
rencyDa | int | intQuantity |
yDat | lng | lngDistance |
Object | obj | objCurrent |
ectSin | sng | sngAverage |
Single | str | strFName |
gleStringUser-def | udt | udtEmployee |
User-de | vnt | vntCheckSum |
变量或过程名的主体应该使用大小写混合形式,并且应该足够长以描述它的作用。而且,函数名应该以一个动词起首,如 InitNameArray 或 CloseDialog。
对于频繁使用的或长的项,推荐使用标准缩略语以使名称的长度合理化。一般来说,超过 32 个字符的变量名在 VGA 显示器上读起来就困难了。
当使用缩略语时,要确保它们在整个应用程序中的一致性。在一个工程中,如果一会儿使用 Cnt, 一会儿使用 Count,将导致不必要的混淆。
在一项有许多用户定义类型的大工程中,常常有必要给每种类型一个它自己的三个字符的前缀。如果这些前缀是以 "u" 开始的,那么当用一个用户定义类型来工作时,快速识别这些类型是很容易的。例如,ucli 可以被用来作为一个用户定义的客户类型变量的前缀。