能被过程修改,就应当把形参标以 Const 。 这样,编译器将以最有效的方式生成代码,保证传递的参数不可变。 如果其他类型的参数希望不被过程所修改,也可以标上 Const 。尽管这对效率没有影响,但 这给过程的调用者带来了更多的信息。
4). 变量
(1). 局部变量
局部变量用于过程内部,果需要的话,应当在过程的入口处立即初始化变量。局部的 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 过程来退出