2.3 编程原则:
1. 为过程和模块赋予表义性强的名字
为了使代码更加容易理解,最容易的方法之一是为你的过程赋予表义性强的名字。函数名DoIt、GetIt的可读性很难与CalculateSalesTax、 RetrieveUserID相比。
由缩写过程名组成的代码很难理解和维护,没有理由再这样做了。
给过程正确的命名,可使程序工程的调试和维护工作大大的改观。请认真对待过程命名的工作,不要为了减少键入操作量而降低过程的可理解度。
实际应用举例:
1) 给过程命名时应大小写字母混合使用。如果句子全使用大写字母,那么阅读起来就非常困难,而大小写字母混合使用的句子,阅读起来就很容易。
2) 定义过程名时不要使用缩写。如果你认为应用程序中的某些工程应使用缩写,那么请将这些情况加上注释,并确保每个人在所有时间内都使用这些缩写。决不要在某些过程中对某些单词进行缩写,而在别的过程中却不使用缩写。
2. 为每个过程赋予单个退出点
3. 创建过程时,始终都应显式地定义它的作用域。
1) VB使用Public作为默认作用域。如果你真的想创建一个公用过程,请向代码阅读者说明这一点。
2) 通过为每个过程赋予一个明确定义的作用域,可以减少代码阅读者需要投入的工作量。应确保你为过程赋予最有意义的作用域。如果一个过程只被同一模块中的另一个过程调用,那么请将它创建成专用过程。如果该过程是从多个模块中的多个过程中调用,请将该说明为公用过程。
3) 每个过程都应以Public、Private或Friend开头。
4. 用参数在过程之间传递数据
应尽量避免使用模块级变量。一般来说,变量的作用域越小越好。为了减少模块级变量和全局变量,方法之一是将数据作为参数在不同过程之间传递,而不是让过程共享模块级变量或全局变量。
1) 为每个参数指定数据类型。
2) 根据情况传递ByVal或ByRef。给每个参数冠以ByVal或ByRef所需要的规则是非常重要的
3) 始终要对数进行检验,决不要假设你得数据没有问题。程序员常犯的一个错误是在编写过程时假设数据没有问题。在初始编程阶段,当编写调用过程时,这样的假设并无大碍。这时你完全能够知道什么是参数的许可值,并按要求提供这些值。但如果你不对参数的数据进行检验,那么下列情况就会给你带来很大麻烦:另外某个人创建了一个调用过程,但此人不知道允许的值;你在晚些时候添加了新的调用过程,并错误的传递了坏数据。
4) 当参数只接受较小的一组值时,请使用枚举值。使用枚举值,可降低编码时出现数据输入错误的可能性。只要有可能,就可考虑使用枚举值。
3. 命名约定
所有变量的定义应该遵循匈牙利命名法,它使用3字符前缀来表示数据类型和控件类型,3个字符的前缀必须小写,前缀后面是由表意性强的一个单词或多个单词组成的名字,而且每个单词的首写字母大写,其它字母小写,这样保证了对变量名能够进行正确的断句。
这样,在一个变量名就可以反映出变量类型和变量所存储的值的意义两方面内容,这使得代码语句可读性强、更加容易理解。
3.1 变量类型前缀列表:
数据类型 前缀 示例
Boolean bln BlnLoggedIn
Currency cur curSalary
Control ctl ctlLastControl
Double dbl dblMiles
ErrObject err errLastError
Single sng sngYears
Handle hwnd hwndPicture
Long lng lngOnHand
Object obj objUserTable
Integer int intAge
String str strName
User-defined type udt udtEmployee
Variant (including Dates) vnt vntDateHired
Array a astrEmployees
3.2 控件类型前缀列表:
控件 前缀 举例
Check chk chkPrint
Combo cbo cboTitle
Command cmd cmdCancel
Data dat datBiblio
Directory list box dir dirSource
Drive list box drv drvTarget
File list box fil filSource
Frame fra fraLanguage
Form frm frmMain
Group push button gpb gpbChannel
Horizontal scroll bar hsb hsbVolume
Image img imgIcon
Label lbl lblHelpMessage
Line lin linVertical
List box lst lstResultCodes
MDI child form mdi mdiContact
Menu mnu mnuFileOpen
OLE container ole olePhoto
Option button opt optSpanish
Panel pnl pnlSettings
Picture box pic PicDiskSpace
Picture clip clp ClpToolbar
Shape shp ShpCircle
Text box txt TxtAddress
Timer tmr TmrAlarm
Vertical scroll bar vsb VsbRate
3.3 结构
当用户定义UDT(即用户自定义结构,Type结构)时,它应加上前缀“Type_”,以示与其它类型的区别。
3.4 其它
开发人员如果遇到上述表格中未列举的类型,请书面通知相关管理人员,由管理人员集中更新列表内容,不得擅自启用未经确定的新变量或控件前缀。
4. 使用常量和枚举值
4.1 使用常量
1) 常数很容易在数据输入时出错
常数存在的主要问题之一是你很容易在键入数字时出错,从而颠倒了数字的位置。例如,当你键入数字10876时,很容易的键入10867或18076。与处理变量和保留字的方法不同,vb的编译器并不在乎颠倒了位置和不正确的数字,有时简单的错误造成的问题不会立即表现出来,而当问题表现出来时,它们会以随机的计算错误的形式出现,这些错误很难准确定位。用常量来取代常数时,vb将在编译时检查常量的有效性。如果常量不存在,vb便将这一情况通知你,并拒绝进行编译,这可以消除错误键入的数字带来的问题,只要常量拥有正确的值,使用该常量的所有代码也有使用该正确值。
2) 常数很难不断更新
3) 常量使代码更容易阅读
使用常量后,得到的一个额外好处是可使创建的代码更容易阅读。常数很不直观。也许你对常数非常了解,但其他人则根本看不明白。通过合理的给常量命名,使用这些常量的代码就变得比较直观了,更容易阅读。
为常量赋予较宽的作用域,这与使用变量时的情况不同。在一个应用程序中你决不应该两次创建相同的常量。如果你发现自己复制了一个常量,请将原始的常量说明转至较宽的作用域,直到该常量可供引用它的所有过程为止。