注释是供人阅读的,而不是让计算机阅读的。
1) 使用完整的语句。虽然不必将注释分成段落(最好也不要分成段落),但你应尽量将注释写成完整的句子。
2) 避免使用缩写。缩写常使注释更难阅读,人们常用不同的方法对相同的单词进行缩写,这会造成许多混乱,如果必须对词汇缩写,必须做到统一。
3) 将整个单词大写,以突出它们的重要性。若要使人们注意注释中的一个或多个单词,请全部使用大写字母。
10. 对注释进行缩进,使之与后随的语句对齐。
注释通常位于它们要说明的代码的前面。为了从视觉上突出注释与它的代码之间的关系,请将注释缩进,使之与代码处于同一个层次上。
11. 为每个过程赋予一个注释标头
每个过程都应有一个注释标头。过程的注释标头可包含多个文字项,比如输入参数、返回值、原始作者、最后编辑该过程的程序员、上次修改日期、版权信息。
12. 当行尾注释用在上面这种代码段结构中时,它们会使代码更难阅读。
使用多个行尾注释时(比如用于过程顶部的多个变量说明),应使它们互相对齐。这可使它们稍容易阅读一些。
13. 何时书写注释
1) 请在每个If语句的前面加上注释。
2) 在每个Select Case语句的前面加上注释。与If语句一样,Select Case语句用于评估对程序执行产生影响的表达式。
3) 在每个循环(包括For…Next循环和Do循环)的前面加上注释。每个循环都有它的作用,许多情况下这个作用不清楚直观。
4) 在修改了全局变量的每个语句前面加上注释。全局变量很讨厌。但如果非常需要使用全局变量,请说明你为何要修改它。这将使代码的调试容易一些。
8. 循环结构
1. 循环结束后不要引用计数器变量。当For…Next循环结束时,计数器变量的最后值不等于end的值,它大于或小于Step的值。
2. 所有Next语句均应包含计数器变量。如果你在Next语句中省略了计数器变量,代码仍可执行,但它的可读性要差一些,因此更难维护.
3. 为了清楚起见,应对For…Next循环中的代码主体语句进行缩进。每当你的代码结构拥有一个开始语句和结束语句时,就必须对代码主体语句进行缩进。
4. 如果你必须提早退出For…Next循环,请使用Exit For语句。不要使用GoTo和一个标注来退出循环。
5. 请在循环的开始处计Do循环的退出条件。你常可选择究竟在循环的开始处还是结尾处放置退出条件。但在循环的开始处计算退出条件,这样的循环比较容易理解。
6. 当你在While和Until之间进行选择时,请使用能实现最简单的条件的这个关键字。
7. 为了保持代码见格的一致性,尽可能使用While子句来完成Do.Loop循环。
9. 控制代码流
9.1 控制代码流的目的:
1) 在规定的情况下使用正确的判断构造;
2) 降低代码的复杂性,使之更容易阅读和调试;
3) 最大限度的减少表达式计算中出错的机会。
9.2 编程原则:
1. 当根据一个条件是True还是False来做出判断时,使用If…Then…Else
即使只有一个语句被执行,也应考虑使用End If构造。当condition的计算结果是True时,如果只有一个语句被执行,该语句可以与If放在同一行上,并且End If可以省略。但若要使代码更便于阅读,请将该语句单独放在一行上,并以End If作为该构造的结束。
2. 对非布尔表达式与各种可能的值进行比较时,使用Select Case语句.
Select Case可以用许多高档次的方式来使用,比如将多个结果值放在一个Case行上。
这些条件互相之间可能毫不相关。这与Select Case结构完全相反。在Select Case结构中,通过对一个(通常是非布尔)测试表达式与Case语句中的每个表达式进行比较,从而构成了各个条件。
1) 即使不需要,也应在每个Select Case构造中包含Case Else语句。如果始终都加上Case Else子句,代码将更夹苠楚明了,就不会迫使其他编程人员去猜测为什么要处理Case语句中的没有特殊理由的结果。
2) 所有Case语句都应使用便于理解的顺序。
不能出现条件范围大的Case子句出现在前面情况。
如:Select Case lngAge
Case is <17
Case is <13
...
End Select
这样的结构导致第二个Case子句不能被执行,从而产生逻辑上的错误。
3) 不要编写决不会产生True结果的Case语句。
3. 对表达式进行格式化
对表达式进行正确的格式化可以减少代码出错的可能性,增加代码的可读性。
1) 要将布尔表达式与True或False相比较。
如:
错误:If rsEmployees.Eof = True then
正确:If rsEmployees.Eof then
布尔表达式与True或False相比较在Select Case 子句中更容易产生错误。
2) 建的布尔变量名应反映肯定的条件而不是否定的条件。使过程变得过分复杂的一个典型例子是创建一个反映否定条件的布尔变量名。根据这种变量进行判断,就会使代码变得更加复杂。代码就增加了出错的可能性。
3) 了清楚起见,用括号将表达式括起来。即使不要求,也要使用括号。不要书写复杂的依靠运算符优先级来执行的表达式,在必要的位置使用括号强调其运算优先级。
4) oTo标识全部使用大写字母。GoTo语句使得代码很难阅读。通过将GoTo标识全部使用大写字母,就可以减少查找过程的GoTo标识所需的工作量。
10. 创建对象和工程模板
如果要创建许多个项目,那么通过创建和使用对象和项目模板,就可以节省大量的开发时间,并增强应用程序的一致性。
10.1 使用对象模板
例如,假设创建了一个窗体对象,并希望在每次从Project菜单中选择Add Form(添加窗体)时使该窗体对象出现在Add Form对话框中,只需将窗体文件的拷贝放入Template文件夹的Forms子文件夹中。如果窗体拥有一个与其相关联的二进制文件(即.frx文件),该文件也必须放入Forms子文件夹中。若不希望对象出现在模板中,就从Template文件夹的相应子文件夹中删除或移走该对象的文件。
当模板对象被添加给一个项目时,便创建该对象的一个新实例,对该对象所作的修改并不传给模板本身。
10.2 设置模板文件夹
将项目中的所有对象模板放入这个自定义模板文件夹中,并让所有开发人员将新文件夹的路径输入他们的Template Directory文本框。
10.3 使用对象和项目模板的目的:
1) 代码的复用
2) 缩短新项目和现有项目的开发时间
10.4 编程原则:
1) 不要将对象模板中的特定应用程序的值或特定组件的值进行硬编码。
对象模板应该尽可能做到通用。
注意:在对象模板中用常量取代硬编码的“幻数”,这个问题很重要,这样开发人员就能更容易理解和替换各个值。
2) 不要将对象模板中的路径进行硬编码。不同的应用程序和不同的安装,其路径也不一样。就象不应该对任何对象中的路径进行硬编码一样,也不应该将对象模板中的路径进行硬编码。
3) 不要将对象模板中的应用程序进行硬编码。
4) 不要将对象模板中的版本号进行硬编码。
5) 展示模板对象的属性,以便接受来自主应用程序的数据。不要展示公用变量或使用全局变量,而应该使用Property 过程。如果使用Property过程,那么当值变更时,就能进行数据验证并执行代码。
10.5 在对象模板中提供内容广泛的注释。
将模板对象添加给项目时,不对它进行修改,这种情况是很少的。应该尽可能使开发人员将模板对象添加给项目时能够非常容易得了解必须在何处进行哪些修改,才能将对象与项目集成起来。要做到这一点的方法之一是使用统一的方法来加上注释,以便说明所做的必要修改,并将这个说明记录在程序模块的Declaration(说明)部分中。这样,开发人员就能非常容易的搜索注释,并进行必要的修改。