VB编程规范.docx
- 文档编号:9886670
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:21
- 大小:28.49KB
VB编程规范.docx
《VB编程规范.docx》由会员分享,可在线阅读,更多相关《VB编程规范.docx(21页珍藏版)》请在冰点文库上搜索。
VB编程规范
VB编程规范
1.开发人员操作规程
1.1VB选项参数的定义:
选项能数的规范有两方面的意义:
一方面是及时排除程序中存在的拼写错误、语法错误,及时保存程序的修改;另一方面是将所有开发人员的开发界面一致化,以避免开发人员在其它开发人员的电脑上工作时因选项不同而造成的差错。
1)打开“工具”菜单,在第一页“编辑器”中选定所有选项,并在Tab宽度中输入4。
代码缩进时,先选中要缩进的代码块,然后使用快捷键是Tab(右移)和Shift+Tab(左移);如果手工输入空格完成缩进,请以4个空格为单位。
2)在第二页“编辑器格式”中,不要修改任何选项,一律使用VB默认值,否则可能在其他人操作时因界面不一致,而产生操作失误。
3)在第三页“通用”中,清除“请求时编译”前的复选框(此时“后台编译”选项会变成灰色),以确保每次程序执行时都是全编译执行。
4)第四页“可连接的”,可按自己习惯设定,建议清除所有复选框,这样会编辑代码时代码窗口可获得最大的显示空间。
5)第五页“环境”中“启动程序时”中一定选择“提示保存改变”(第二项),这样每次程序被修改后再运行时,VB都会提示保存,避免对程序的修改因偶然因素而丢失。
6)第六页“高级”中各选项由开发人员按自己习惯定义,但要注意当使用SDI方式进行开发时,每次在设计环境中用鼠标拖动窗体都会导致窗体的StartUpPosition变为0-手动,原来在屏幕上居中(StartUpPosition为2-屏幕中心)的窗体运行时可能会改变位置。
1.2快捷键的使用
使用快捷键提高操作速度。
F1 帮助
F2 显示对象浏览器
F4 查看当前选中控件的属性窗体
F5 运行
F7 由窗体设计切换到对应的代码窗体
F8 单步执行
Shift+F2 查看当前光标所在的变量或函数、子过程的定义
Shift+F7 由代码窗体切换到对应的窗体设计界面
Shift+F8 逐过程单步执行
Ctrl+F5 全编译执行
Ctrl+F 在代码窗体进行查找
Ctrl+G 查看立即窗体
Ctrl+R 查看工程窗口
2.设计模块和过程
2.1建具有很强内聚力的模块
过程的重要性往往比模块的重要性更容易理解,过程是指执行一个统一函数的一段代码。
模块常被错误的视为是一个仅仅用于存放过程的容器。
有些开发人员甚至把这种思路作了进一步的发挥,将他们的所有过程放入单个模块之中。
之所以不能正确的认识模块的功能,原因之一是模块的实现实际上并不影响程序的执行。
当一个工程被编译时,如果所有过程都放在单个模块中或者放在几十个模块中,这没有任何关系。
虽然模块的数量对代码的执行并无太大的影响,但是当创建便于调试和维护的代码时,模块的数量有时会带来很大的影响。
模块应该用来将相关的过程组织在一起。
当模块包含一组紧密关联的过程时,该模块可以说具有强大的内聚力。
当模块包含许多互不相关的过程时,该模块便具有较弱的内聚力。
应该努力创建内聚力比较强的模块。
大多数工程都包含许多并不十分适合与其他过程组合在一起的过程。
在这种情况下,可以为这些不合群的过程创建一个综合性收容模块。
创建模块时,应知道“模块化”这个术语的含义是什么。
模块的基本目的是创建相当独立的程序单元。
从根本上来讲,模块可以添加给另一个工程,并且可以通过直接调用它的公用过程来使用它。
2.2创建松散连接和高度专用的过程
1.使所有过程都执行专门的任务
每个过程都应执行一项特定的任务,它应出色的完成这项任务。
应避免创建执行许多不同任务的过程。
创建专用过程有许多好处。
首先调试将变得更加容易。
2.尽量使过程成为自成一体的独立过程
当一个过程依赖于其他过程的调用时,称为与其他过程紧密连接的过程。
紧密连接的过程会使调试和修改变得比较困难,因为它牵涉到更多的因素。
松散连接的过程优于紧密连接的过程,但你不可能使每个过程都成为独立的过程。
2007-6-1606:
29回复
ronnie7777
2楼
若要使过程具备较强的独立性,方法之一是尽量减少全局变量和模块级变量。
创建过程时,设法将每个过程视为一个黑箱,其他例程不应要求了解该过程的内部工作情况,该过程也不应要求了解它外面的工程情况。
这就是为什么你的过程应依靠参数而不应依靠全局变量的原因。
创建专用过程时,请考虑下列指导原则:
1)将复杂进程放入专用过程。
如果应用程序使用复杂的数学公式,请考虑将每个公式放入它自己的过程中。
这样使用这些公式的其他过程就不包含用于该公式的实际代码。
这样也可以更容易发现与公式相关的问题。
2)将数据输入/输出(I/O)放入专用过程。
3)将专用过程中可能要修改的代码隔离。
如果你知道某个进程经常变更,请将这个多变的代码放入专用过程,以便以后可以更容易的进行修改,并减少无意中给其他进程带来问题的可能性。
4)将业务规则封装在专用过程中。
业务规则常属于要修改的代码类别,应与应用程序的其余部分隔开。
其他过程不应知道业务规则,只有要调用的过程才使用这些规则。
3.设计模块和过程时,要达到下列目的:
1)创建更加容易调试和维护的过程
2)创建具有强大内聚力的模块
3)创建高度专用的过程
4)创建松散连接的过程
5)尽量使过程具有独立性
6)提高过程的扇入性
7)降低过程的扇出性
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)始终要对数进行检验,决不要假设你得数据没有问题。
程序员常犯的一个错误是在编写过程时假设数据没有问题。
在初始编程阶段,当编写调用过程时,这样的假设并无大碍。
这时你完全能够知道什么是参数的许可值,并按要求提供这些值。
但如果你不对参数的数据进行检验,那么下列情况就会给你带来很大麻烦:
另外某个人创建了一个调用过程,但此人不知道允许的值;你在晚些时候添加了新的调用过程,并错误的传递了坏数据。
2007-6-1606:
29回复
ronnie7777
3楼
4)当参数只接受较小的一组值时,请使用枚举值。
使用枚举值,可降低编码时出现数据输入错误的可能性。
只要有可能,就可考虑使用枚举值。
3.命名约定
所有变量的定义应该遵循匈牙利命名法,它使用3字符前缀来表示数据类型和控件类型,3个字符的前缀必须小写,前缀后面是由表意性强的一个单词或多个单词组成的名字,而且每个单词的首写字母大写,其它字母小写,这样保证了对变量名能够进行正确的断句。
这样,在一个变量名就可以反映出变量类型和变量所存储的值的意义两方面内容,这使得代码语句可读性强、更加容易理解。
3.1变量类型前缀列表:
数据类型前缀示例
BooleanblnBlnLoggedIn
CurrencycurcurSalary
ControlctlctlLastControl
DoubledbldblMiles
ErrObjecterrerrLastError
SinglesngsngYears
HandlehwndhwndPicture
LonglnglngOnHand
ObjectobjobjUserTable
IntegerintintAge
StringstrstrName
User-definedtypeudtudtEmployee
Variant(includingDates)vntvntDateHired
ArrayaastrEmployees
3.2控件类型前缀列表:
控件前缀举例
CheckchkchkPrint
CombocbocboTitle
CommandcmdcmdCancel
DatadatdatBiblio
DirectorylistboxdirdirSource
DrivelistboxdrvdrvTarget
FilelistboxfilfilSource
FramefrafraLanguage
FormfrmfrmMain
GrouppushbuttongpbgpbChannel
HorizontalscrollbarhsbhsbVolume
ImageimgimgIcon
LabellbllblHelpMessage
LinelinlinVertical
ListboxlstlstResultCodes
MDIchildformmdimdiContact
MenumnumnuFileOpen
OLEcontaineroleolePhoto
OptionbuttonoptoptSpanish
PanelpnlpnlSettings
PictureboxpicPicDiskSpace
PictureclipclpClpToolbar
ShapeshpShpCircle
TextboxtxtTxtAddress
TimertmrTmrAlarm
VerticalscrollbarvsbVsbRate
3.3结构
当用户定义UDT(即用户自定义结构,Type结构)时,它应加上前缀“Type_”,以示与其它类型的区别。
3.4其它
开发人员如果遇到上述表格中未列举的类型,请书面通知相关管理人员,由管理人员集中更新列表内容,不得擅自启用未经确定的新变量或控件前缀。
4.使用常量和枚举值
4.1使用常量
1)常数很容易在数据输入时出错
常数存在的主要问题之一是你很容易在键入数字时出错,从而颠倒了数字的位置。
例如,当你键入数字10876时,很容易的键入10867或18076。
与处理变量和保留字的方法不同,vb的编译器并不在乎颠倒了位置和不正确的数字,有时简单的错误造成的问题不会立即表现出来,而当问题表现出来时,它们会以随机的计算错误的形式出现,这些错误很难准确定位。
用常量来取代常数时,vb将在编译时检查常量的有效性。
如果常量不存在,vb便将这一情况通知你,并拒绝进行编译,这可以消除错误键入的数字带来的问题,只要常量拥有正确的值,使用该常量的所有代码也有使用该正确值。
2)常数很难不断更新
3)常量使代码更容易阅读
使用常量后,得到的一个额外好处是可使创建的代码更容易阅读。
常数很不直观。
也许你对常数非常了解,但其他人则根本看不明白。
通过合理的给常量命名,使用这些常量的代码就变得比较直观了,更容易阅读。
为常量赋予较宽的作用域,这与使用变量时的情况不同。
在一个应用程序中你决不应该两次创建相同的常量。
如果你发现自己复制了一个常量,请将原始的常量说明转至较宽的作用域,直到该常量可供引用它的所有过程为止。
4.2使用枚举值
你不必记住参数的数值,错误地设定值的可能性也大大减少了。
虽然你仍可为参数设定数值,而不是设定枚举成员的名字,但你决不应该这样去做。
1)枚举值的所有成员都是长整型数,你不得使用其他数据类型。
2007-6-1606:
29回复
ronnie7777
4楼
2)使用常量和枚举值的目的:
减少数字换位和键入错误带来的代码错误;
将来可以更容易更改各个值;
使代码更容易阅读。
4.3编程原则
常量不同于变量的另一个标识特征是不使用数据类型前缀。
有些外部数据库仍然使用大写字母常量。
例如,如果用API浏览器查找和拷贝与API相关的常量,你常可看到它们是使用大写字母的常量。
在这种情况下,请将这些常量保持原状,以便达成应用程序之间的一致性。
1)将应用程序前缀或特定的前缀用于枚举成员
i.不必用前缀来表示枚举成员的类型,因为所有成员总是属于长整型数。
但应该使用专门的前缀来表示它的值来自应用程序或组件。
ii.应该用一个指示符作为枚举成员的前缀,因为当vb遇到一个枚举成员名时,如果其他被引用的类型库中包含相同的名字,它就会搞混。
2)若要了解键入的系统常量是否正确,方法之一是全部用小写字母键入该常量。
如果该常量有效,vb就会将它转换成正确的大小写字母。
如果该常量仍然保持全部为小写字母,就表示键入的名字不正确,必须进行纠正。
3)当参数接受有限数量的值时,请使用枚举
4)使用SelectCase结构时,始终要加上一个Else子句,以便处理传递给过程的有效值。
5.变量
5.1定义有焦点的变量
用于多个目的的变量称为无焦点(多焦点)的变量。
无焦点变量所代表的意义与程序的执行流程有关,当程序处于不同位置时,它所表示的意义是不固定的,这样就给程序的可读性和可维护性带来了麻烦。
比如:
定义一个名为rs的RecordSet变量,先用这个变量取得了医院员工数据,之后又用同一个变量名取得了住院病人数据,那么单独抽取出一句使用了变量rs的语句,如果只凭这一句、不从头读起的话,很知道这句话究竟使用的是哪个表的数据。
这给程序的维护带来了不必要的麻烦。
5.2只对常用变量名和长变量名进行缩写
如果需要对变量名进行缩写时,一定要注意整个代码中缩写规则的一致性。
例如,如果在代码的某些区域中使用Cnt,而在另一些区域中又使用Count,就会给代码增加不必要的复杂性。
变量名中尽量不要出现缩写。
5.3使用统一的量词
通过在结尾处放置一个量词,就可创建更加统一的变量,它们更容易理解,也更容易搜索。
例如,请使用strCustomerFirst和strCustomerLast,而不要使用strFirstCustomer和strLastCustomer。
量词列表:
量词后缀
说明
First
一组变量中的第一个
Last
一组变量中的最后一个
Next
一组变量中的下一个变量
Prev
一组变量中的上一个
Cur
一组变量中的当前变量
5.4使用肯定形式的布尔变量
给布尔变量命名时,始终都要使用变量的肯定形式,以减少其它开发人员在理解布尔变量所代表的意义时的难度。
5.5为每个变量选择最佳的数据类型
这样即能减少对内存的需求量,加快代码的执行速度,又会降低出错的可能性。
用于变量的数据类型可能会影响该变量进行计算所产生的结果。
在这种情况下,vb不会产生运行期错误,它只是迫使该值符合数据类型的要求。
这类问题极难查找。
例如:
对可能会出现浮点数的变量,定义为整形或长整形会导致VB在运算时将该变量的值自动取整,这种VB自动进行、隐式的的操作会增大程序排错时的难度。
5.6只有在绝对必要时才使用Variant数据类型
Variant还存在其他缺陷。
它们占用的内存比VB的任何其他数据类型都要多,而且对Variant中的数据进行操作时的速度几乎总是比对其他数据类型进行操作的速度要慢,另外变体类型还可能导致VB在程序运行过程中对数据类型进行自动转换。
只有在确实不能预料变量的类型时才能使用Variant。
注意:
当你使用单个As<type>子句在同一个代码行上说明多个变量时,只有Dim语句中的最后一个变量被赋予特定数据类型。
所有其他变量均被赋予Variant数据类型。
2007-6-1606:
29回复
ronnie7777
5楼
5.7尽量缩小变量的作用域
如果变量的作用域大于它应有的范围,变量可继续存在,并且在不再需要该变量后的很长时间内仍然占用资源。
它们的主要问题是,任何模块中的任何过程都能对它们进行修改,并且很难跟踪究竟是何处进行修改的。
占用资源是作用域涉及的一个重要问题。
如果创建全局的Recordset(记录集)变量,问题会复杂。
对于Recordset
对变量来说,尽量缩小作用域将会对应用程序的可靠性产生巨大的影响。
5.8使用“&”字符对字符串进行并置操作
“&”字符能清楚的传达函数的意图,消除阅读者可能存在的疑点,使阅读者清楚地理解目前的操作是加法、还是字符串连接,并且不会因为类型的强制转换而产生不正确的结果。
6.代码的格式化
6.1对代码进行格式化时,要达到的目的包括:
1)通过代码分割成功能块和便于理解的代码段,使代码更容易阅读和理解;
2)使用空行和注释行,将程序中逻辑上不相关的代码块分开。
比如:
变量声明部分和代码语句间的分隔;较长的过程中,完成不同功能的代码块间的分隔。
要避免出现逻辑上混乱的分隔,如:
某一逻辑功能代码块中间用空行进行了分隔,但是在相邻功能代码块之间却没有分隔,这样会给程序阅读者造成错觉。
3)减少为理解代码结构而需要做的工作;
4)使代码的阅读者不必进行假设;
5)使代码结构尽可能做到格式清楚明了。
6.2编程原则:
1)要将多个语句放在同一行上
不论是变量声明,还是语句都不要在一行上书写多个。
2)用行接续符
对较长语句,如API声明等,在代码窗体可视范围内给予换行,不要使别人必须通过滚动窗口才能查看到完整的代码。
注意,当处理长字符串时,要使用
"字符串1"&_
"字符串2"
的格式。
3)缩进后续行
当你将变量设置为某个值时,所有后续行的缩进位置应与第一行的变量值相同;
当你调用一个过程时,后续行缩进到第一个参数的开始处;
当你将变量或属性设置为等于表达式的计算结果时,请从后面分割该语句,以确保该表达式尽可能放在同一行上。
4)在If语句后缩进;
在Else语句后缩进
在SelectCase语句后缩进
在Case语句后缩进
在Do语句后缩进
已经用行接续符分割的语句的各个行要缩进
在With语句后缩进。
对从属于行标注的代码进行缩进。
5)在执行统一任务的各个语句组之间插入一个空行。
好的代码应由按逻辑顺序排列的进程或相关语句组构成。
7.代码的注释
7.1使用代码注释的目的:
1)文字说明代码的作用(即为什么要用编写该代码,而不是如何编写);
2)确指出该代码的编写思路和逻辑方法;
3)人们注意到代码中的重要转折点;
4)使代码的阅读者不必在他们的头脑中仿真运行代码的执行过程.
7.2编程原则:
1.用文字说明代码的作用:
简单的重复代码做写什么,这样的注释几乎不能给注释增加什么信息.如果你使用好的命名方法来创建直观明了的代码那么这些类型的注释绝对增加不了什么信息.
2.如果你想违背好的编程原则,请说明为什么
有的时候你可能需要违背好的编程原则,或者使用了某些不正规的方法,.遇到这种情况时,请用内部注释来说明你在做什么和为什么要这样做。
技巧性特别高的代码段,一定要加详细的注释,不要让其他开发人员花很长时间来研究一个高技巧但不易理解的程序段。
3.用注释来说明何时可能出错和为什么出错
4.在编写代码前进行注释
给代码加注释的方法之一是在编写一个过程前首先写上注释.如果你愿意,可以编写完整句子的注释或伪代码.一旦你用注释对代码进行了概述,就可以在注释之间编写代码.
5.在要注释的代码前书写注释
注释一定出现在要注释的程序段前,不要在某段程序后书写对这段程序的注释,先看到注释对程序的理解会有一定帮助。
2007-6-1606:
29回复
ronnie7777
6楼
如果有可能,请在注释行与上面代码间加一空行。
6.纯色字符注释行只用于主要注释
注释中要分隔时,请使用一行空注释行来完成,不要使用纯色字符,以保持版面的整洁、清晰。
7.避免形成注释框
用星号围成的注释框,右边的星号看起来很好,但它们给注释增加了任何信息吗?
实际上这会给编写或编辑注释的人增加许多工作。
8.使用撇号来指明注释
不要使用Rem语句来注释。
9.增强注释的可读性
注释是供人阅读的,而不是让计算机阅读的。
1)使用完整的语句。
虽然不必将注释分成段落(最好也不要分成段落),但你应尽量将注释写成完整的句子。
2)避免使用缩写。
缩写常使注释更难阅读,人们常用不同的方法对相同的单词进行缩写,这会造成许多混乱,如果必须对词汇缩写,必须做到统一。
3)将整个单词大写,以突出它们的重要性。
若要使人们注意注释中的一个或多个单词,请全部使用大写字母。
10.对注释进行缩进,使之与后随的语句对齐。
注释通常位于它们要说明的代码的前面。
为了从视觉上突出注释与它的代码之间的关系,请将注释缩进,使之与代码处于同一个层次上。
11.为每个过程赋予一个注释标头
每个过程都应有一个注释标头。
过程的注释标头可包含多个文字项,比如输入参数、返回值、原始作者、最后编辑该过程的程序员、上次修改日期、版权信息。
12.当行尾注释用在上面这种代码段结构中时,它们会使代码更难阅读。
使用多个行尾注释时(比如用于过程顶部的多个变量说明),应使它们互相对齐。
这可使它们稍容易阅读一些。
13.何时书写注释
1)请在每个If语句的前面加上注释。
2)在每个SelectCase语句的前面加上注释。
与If语句一样,SelectCase语句用于评估对程序执行产生影响的表达式。
3)在每个循环(包括For…Next循环和Do循环)的前面加上注释。
每个循环都有它的作用,许多情况下这个作用不清楚直观。
4)在修改了全局变量的每个语句前面加上注
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 编程 规范