VB编程标准
- 格式:doc
- 大小:148.50 KB
- 文档页数:12
第一部分设计 (2)第一章创建对象和工程模板 (2)第二章设计模块和过程 (2)第二部分编程中使用的约定 (3)第三章命名约定 (3)第四章使用常量和枚举值 (4)第五章变量 (5)第六章对错误的处理 (6)第三部分代码结构 (7)第七章代码的格式化 (7)第八章代码注释 (9)第九章循环结构 (10)第十章控制代码流 (11)第一部分设计第一章创建对象和工程模板一.使用和修改现有模板。
VB提供的现有模板存放在主文件夹的Template文件夹中,对其相应子文件夹中的对象文件或项目文件进行修改和删除,就可更新现有模板。
二.创建自定义摸板。
建立自定义模板文件夹(其子文件夹应与Template的子文件夹相同),将创建的对象文件和项目文件复制到相应子文件夹中。
再在Options对话框中Environment选项卡上的Templates Directory中设定该文件夹。
编程原则1.不要将对象模板中的特定应用程序或特定组件的值进行硬编码注意:A.不要将对象模板中的路径、应用程序名、版本号进行硬编码。
例如可使用App.Path 代替具体路径。
B.通过为模板对象的设置属性来代替 Public 变量,以便接收来自主程序的数据。
2.在对象模板中提供内容广泛的注释,尤其是在需要进行修改的地方加上“统一”的注释。
例如:‘* NOTE:Place code here to pass the‘ *success to the calling procedure.第二章设计模块和过程一.创建具有强内聚力的模块。
模块应该用来将具有一定共性的过程组织在一起,其过程应紧密关联。
例如:mdlConnact模块包含CreateContact,DisplayContact,DeleteContact过程;mdlDatabase模块包含CloseDatabase,CreateDatabase, OpenDatabase 过程。
二.创建松散连接和高度专用的过程。
首先,应使所有过程都执行专门的任务,尽量创建执行特定任务的专用过程。
其次,尽量使过程成为自成一体的独立过程,尽量减少过程之间的连接关系,既减少在过程中使用全局变量和模块级变量。
再次,应提高过程被多个过程调用的扇入性,降低过程调用多个过程的扇出性,从而降低过程调试的困难程度。
最后,应按字母顺序对模块中的过程进行排序。
编程原则1.为过程和模块赋予表义性强的名字。
注意:A.给过程命名时应该大小写字母混合使用。
B.定义过程名时不应使用缩写。
2.为每个过程赋予单个退出点。
在一个过程中应只在结尾处(通常)退出,当在其他处需要退出时应使用GoTo语句跳转到结尾处再退出。
注意:应创建完整的退出代码,即检查对正确退出有影响的某些变量的值,并相应地对其进行清除。
3.为每个过程赋予明确的作用域。
例如:Private Sub…,Public Sub…,Friend Sub…等。
4.使用过程参数在过程间传递数据,减少在过程中使用全局变量和模块级变量。
注意:A.在过程定义中明确指定每个参数的数据类型。
B.根据情况传递数据时使用ByVal或ByRef关键字。
在使用ByRef传递数据时应加入一定的注释表明对原始变量进行引用。
C.始终对参数进行检验,决不要假设传递的数据没有问题。
例如:数据范围验证等。
D.当参数正确值的范围较小时应使用枚举值。
5.使用统一和直观明了的方式来调用过程。
注意:A.Call关键字至用来调用Sub过程,而且 Sub过程也应必须使用Call调用。
B.调用Function过程时,应加上括号即使不必须用,并对其返回值进行检索。
例如:NO: ShellExecute frmMain.hwnd,”Open”,strFilename,0,0,1Yes: Dim lngResult As LongLngResult = ShellExecute (frmMain.hwnd,”Open”,strFilename,0,0,1)第二部分编程中使用的约定第三章命名约定一.数据类型后缀。
在变量命名时通过后缀区别变量的数据类型,不直观,其中$=String,%=Long,&=Integer,!=Single,#=Doable。
例如:FirstName$ 表示String数据类型。
二. 匈牙利标记法。
在命名时利用3个字符前缀来表示数据类型和控件类型。
第四章使用常量和枚举值对过程中的数字进行硬编码时,有可能出现许多不易发现的错误。
这种硬编码的数字通常称为“幻数”。
首先,“幻数”在输入时很可能输错。
例如:将10876输成18076等。
其次,“幻数”很难更新。
于是,应利用常量和枚举值代替“幻数”。
一.使用常量。
使用常量不仅可以消除“幻数”带来的问题,而且可使创建的代码更容易阅读。
常量还非常适合赋予较宽的作用域(在一个应用程序中决不应该两次创建相同的常量),以便供引用它的所有过程使用。
二.使用枚举值。
枚举值与常量相似,它们都是被赋予值的实体。
枚举值的行为特性类似模块中的公用常量组。
在使用时,VB可以提供下拉列表框提供有效值,使用更简单方便。
但在利用枚举类型作为过程参数时,要注意:过程还可以接受枚举值以外的长整型值,必须进行数据检验。
编程原则1.给所有常量加上前缀c_和作用域指示符。
例如:Public Const gc_KeyControl。
2.无论什么作用域,均用常量取代“幻数”。
例如:Const c_Max_Recently_Used=4For intCount = 1 To c_Max_Recently_Used……3.只要可能,均应使用枚举。
4.使用控件数组时,应该创建与每个索引相关的常量(通过常量名称来反映索引代表的相关意义),来消除出错的可能性。
5.枚举成员的前缀不应用来表示数据类型,而应用来表示应用程序前缀或公司特定的前缀。
6.应注意在相应的设置或函数中使用相应的系统常量。
系统常量是一些全局常量,它们是VB类型库的组成部分,不必对他们进行定义,或引用类型库,它们随时可供使用。
例如:vbNormal=0,vbMinimized=1,vbMaximized=2等应在设置窗体状态时使用。
7.当参数接受有限数量的值时,应使用枚举,并验证作为枚据类型传递的值。
注意:A.不应利用幻数来验证数据。
B.使用Select Case来验证一个值是一组离散值的一个有效成员时,不要忘记加上Case Else 子句,以便处理无效数据。
第五章变量编程原则1.定义有焦点的变量,使每个变量服务于“一个”定义明确的目的。
2.为变量赋予表义性强的名字。
3.在变量名中混合使用大小写。
4.只对常用变量名和长变量名进行缩写。
5.使用统一的量词后缀。
例如First,Last,Next,Prev,Cur,Min,Max,Save,Tmp,Scr,Dst。
其中 Save表示保存必须在以后清除的另一个变量,Cur表示一组变量中的当前变量。
6.使用肯定形式的布尔变量。
例如:NO:blnNotFound;YES:blnLoaded。
7.显式说明变量,即必须用Dim、Private、Public或Static来说明每个变量。
可Option Explicit来防止隐式变量的存在。
8.用心选择数据类型定义变量。
为变量选择最佳数据类型可以降低出错的可能性,减少对内存的需求量,加快代码的执行速度。
使用数据类型时应该遵循以下规则:A.存储任何类型的文本,请均用String 数据类型。
B.如果只存放True和False这两个值,请用Boolean数据类型。
C.若要存放不包含小数位、大于或等于-32768、小于或等于32767的数字,请使用Integer 数据类型。
D.若存放不带小数位的数字,但是数字值大于或小于Integer数据类型允许的值,用Long 数据类型。
E.若要存放包含小数位的数字,请使用Single数据类型。
如果需要存放的数字大于Single 数据类型能存放的数字,则请使用Double数据类型。
F.若要存放美元金额,请使用Currency数据类型。
G.若要存放日期或时间值,请使用Data数据类型。
9.只在绝对必要时才使用Variant数据类型。
使用Variant比使用特定类型占用的内存多,操作速度慢,有时会使程序的可靠性降低。
注意:A.如果可能,每行只说明一个变量,这样可减少无意创建Variant变量的可能性,并可增加代码的可读性。
例如:NO: Dim strName , strAddress As StringNO: Dim intAge As Integer , strName As String , strAddress As StringYES:Dim intAge As IntegerDim strName As StringDim strAddress As String其中第一次声明strName没有As(Type)子句,VB将默认其为Variant类型(定义函数时同样)第二次的可读性差。
B. 决不要将符号“+”用于字符串的并置运算,应使用“&”字符。
10.尽量缩小变量的作用域。
第六章对错误的处理程序出错的可能性很大,基本上可分为两种类型:一种是编译错误,主要是由各种句法错误造成的。
另一种是运行期错误,它是程序运行时产生的,未经处理的错误是致命的,它会导致整个应用程序运行瘫痪。
通过创建错误处理的程序,在出现运行错误时,就能防止程序被中止,不至于瘫痪。
一.Err对象。
Err对象是个运行期对象,它包含了关于最新错误的信息。
当程序遇到一个错误,或者当你使用Err对象的Raise方法故意引发一个错误时,便使Err对象的属性被设置为该错误的相应值。
如果需要使用这些值,请将它们立刻用变量保存或立即对它们进行操作,因为Err对象的属性值可能被清除。
例如:当遇到On Error语句,或使用Exit Sub 、Exit Function或ExitProperty而不管它包含多大的代码量。
最好在代码中放一个OnError语句,作为代码的第一行,放在紧靠过程标题的后面和变量说明的前面。
捕获错误,基本上可以使用下面两种方法:1.使用On Error Resume Next忽略错误。
对错误进行处理的最简单(最危险)的方法是使用OnErrorResumeNext语句。
它规定代码中的错误将完全被忽略,存在错误的代码将被跳过,然后继续执行下一个语句。
但你仍然可以通过Err对象了解所发生的错误信息,并进行恰当的提示或进一步处理(只是处理语句必须紧跟在发生错误语句后面,并需编写大量的代码)。
2.使用On Error GoTo转移执行的代码流。
许多意料之外的错误如果被忽略了,将会使过程产生许多问题。
所以在多数情况下,必须利用OnErrorGoTo语句将代码的执行转移到指定的处理程序。