话,应当在过程的入口处立即初始化变量。局部的 AnsiString 类型的变量自动被初始化为空字符串,局部的接口和 dispinterface 类型的变量自 动被初始化为 nil,局部的 Variant 和 OleVariant 类型的变量自动被初始化为 Unassigned。
(2). 全局变量
一般不鼓励使用全局变量。不过,有时候需要用到。即使如此,也应当把全局变量限制在需要 的环境中。例如,一个全局变量可能只在单元的实现部分是全局的。 全局数据如果将由许多单元使用,就应移动到一个公用单元里被所有对象使用。全局数据可在 声明时直接初始化为一个值。注意,所有全局变量自动进行零初始化,因此,不要将全局变量初 始化为诸如 0 、nil、或 Unassigned 等空值。零初始化的全局变量在.EXE 文件中不占空间。 零初始化的数据保存在虚拟的数据段中, 而虚拟数据段只在应用程序启动时才分配内存。 非零初 始化的全局数据则在.EXE 文件中占空间。
5). 类型
(1). 大小写规则
类型标识符是保留字,应当全部小写。Win32 API 类型常常全部大写,并且遵循诸如 Windows.pas 或其他 API 单元中关于特定类型名的规则。对于其他变量名,第一个字母应大 写,其他字母则大小写交错。下面是一些例子: var MyString: string; // 保留字 WindowsHandle: HWND; // Win32 API 类型 I: Integer; //在 System 单元中引入的类型标识
(2). 浮点型
不鼓励使用 Real 类型,因为它只是为了与老的 Pascal 代码兼容而保留的。通常情况下,对 于浮点数应当使用 Double。Double 可被处理器优化,是 IEEE 定义的标准的数据格式。当需 要比 Double 提供的范围更大时,可以使用 Extend。Extend 是 intel 专用的类型,
Java 不支 持。当浮点变量的物理字节数很重要
时(可能使用其他语言编写 DLL),则应当使用 Single。
(3).Variant 和 OleVariant
一般不建议使用 Variant 和 OleVariant。 但是, 当数据类型只有在运行期才知道时(常常是在 COM 和数据库应用的程序中),这两个类型对编程就有必要。当进行诸如自动化 ActiveX 控件 的 COM 编程时,应当使用 OleVariant;而对于非 COM 编程,则应当使用 Variant。这是因 为, Variant 能够有效地保存 Delphi 的原生字符串, OleVariant 则将所有字符串转换为 OLE 而 字符串(即 WideChar 字符串),且没有引用计数功能。
6). 语句
(1). If 语句
在 if/then/else 语句中,最有可能执行的情况应放在 then 子句中,不太可能的情况放在 else 子句中。为了避免出现许多 if 语句,可以使用 case 语句代替。如果多于 5 级,不要使用 if 语句。请改用更清楚的方法。不要在 if 语句中使用多余的括号。 如果在 if 语句中有多个条件要测试,应按照计算的复杂程度从右向左排。这样,可以使代码 充分利用编译器的短路估算逻辑。例如,如果 Condition1 比 Condition2 快,Condition2 比 Condition3 快,则 if 语句一般应这样构造: if Condition1 and Condition2 and Condition3 then 如果 Condition3 为 False 的机会很大,利用短路估算逻辑,我们也可以将 Condition3 放在 最前面: if Condition3 and Condition1 and Condition2 then
(2). case 语句
(1) 概述
case 语句中每种情况的常量应当按数字或字母的顺序排列。每种情况的动作语句应当简短且 通常不超过 4 - 5 行代码。如果动作太复杂,应将代码单独放在一个过程或函数中。Case 语 句的 else 子句只用于默认情况或错误检测。
(2) 格式
case 语句遵循一般的缩进和命名规则。
(3). while 语句
建议不要使用 Exit 过程来退出 while 循环。如果需要的话,应当使用循环条件退出循环。所 有对 while 循环进行初始化的代码应当位于 while 入口前,且不要被无关的语句隔开。任何业 务的辅助
工作都应在循环后立即进行。
(4). for 语句
如果循环次数是确定的,应当用 for 语句代替 while 语句。
(5). repeat 语句
repeat 语句类似于 w