in ... end else begin SomeOtherStatement; end; end 语句永远单独作为一行. 如果 begin 语句不是 else 子句的一部分, 相应的 end 语句应该缩进到与 beg in 对齐的位置.
Object Pascal 语言
括号
左括号和后一个字符之间不应该出现空格, 同样, 右括号和前一个字符之间也不 应该出现空格. 下面的例子说明括号和空格的错误及正确使用: CallProc( AParameter ); // 错误
CallProc(AParameter);
// 正确
不要在语句中使用无意义的括号. 括号只应该为达到某种目的而出现在源代码中 . 下面的例子说明错误和正确的用法: if (I = 42) then // 错误 - 括号毫无意义 if (I = 42) or (J = 42) then // 正确 - 的确需要括号
保留字和关键字
Object Pascal 语言保留字和关键字应该完全小写.
过程和函数(子程序 过程和函数 子程序) 子程序
命名规则 命名规则
子程序名应该以大写字母开头, 而且应该易于阅读. 子程序名应该以大写字母开头 而且应该易于阅读 下面是一个正确格式的子程序名: procedure thisisapoorlyformattedroutinename; 下面是一个首字母适当大写的子程序名: procedure ThisIsMuchMoreReadableRoutineName; 子程序名应该具有与其用途相关的含义. 导致发生某动作的子程序应该以动词为 前缀命名, 例如: procedure FormatHardDrive; 为输入参数赋值的子
程序应该以 Set 为前缀命名,例如: procedure SetUserName; 取回数值的子程序应该以 Get 为前缀命名, 例如: function GetUserName: string; 形参(Formal Parameters) 形参 格式 在可能的情况下, 同类型的形参应该在一条语句中说明: procedure Foo(Param1, Param2, Param3: Integer; Param4: string); 命名 所有的形参名称
应该具有与其用途相关的含义, 而且不应该基于传递到子程序的 标识符名称. 适当情况下, 参数名应该以字符 A 为前缀, 例如, procedure SomeProc(AUserName: string; AUserAge: integer); 使用前缀 "A" 是一种约定, 以便参数名与类的属性名、域名重复时消除歧义. 参数顺序 下面的形参顺序主要是为在寄存器模式下得到更高的性能, 寄存器模式是惯用的调 用模式. 调用者最常使用的参数应该在参数的最前位置, 使用越少的参数, 其位置应该越在右 面.
输入参数队列应该在输出参数队列的左面. 最抽象参数应该在最精确参数的左面, 例如: SomeProc(APlanet, AContinent, ACountry, AState, ACity). 参数顺序规则也可能出现例外情况, 比如事件响应程序(event handlers), 名为 Sender 的 TObject 类型参数通常作为第一个参数. 常数参数(Constant Parameters) 常数参数 当 记录, 数组, ShortString, 或 接口(interface)类型参数在子程序中不被修改, 则相应 的形参应该标识为 Const. 这将确保编译器产生最高效的代码来传递这些不被修改 的. 其他类型的参数如果在子程序中不被修改, 也可以标识为 Const. 虽然不能提高效率, 但至少为子程序的调用者提供了更多关于参数使用的信息. 命名冲突 如果引用的 2 个单元中包含同名子程序, 则实际调用的将是在 uses 子句中位置最后 的 单 元 中 的 子 程 序 . 为 了 避 免 这 种 与 uses 子 句 相 关 的 语 意 不 明 (uses-clause-dependent ambiguities), 应该用单元名作为前缀来指明所调用的子程序, 例如: SysUtils.FindClose(SR); 或 Windows.FindClose(Handle);
变量
变量命名和格式
变量名称应该具有与其用途相关的含义. 循环控制变量可以命名为单个字母, 比如 I, J, 或 K. 也可以是更有意义的名称, 比如 UserIndex. Boolean 变量名称必须描述得足够详细, 保证其 True 和 False 取值具有清楚的含义.
局部变量
在过程内使用的局部变量与其他变量一样, 遵循相同的用法和命名约定. 临时变量应该 适当地命名. 如果必要, 局部变量的初始化应该在子程序入口处立即进行. AnsiString 变量自动初始 化 为 空 字 符 串 , interface 和 dispinterface 类 型 变 量 自 动 初 始 化 为 nil, Variant 和 OleVa