使用不必要的括号。 括号只应在源代码中需要的地方使用。 以下的例 子示范了错误和正确的使用: if (I = 42) then //错误 - 多余的括号 if (I = 42) or (J = 42) then //正确 - 需要括号
3.2 保留字和关键字
第 5 页 共 27页
Objec
t Pascal 保留字和关键字永远是全部小写。
3.3 过程和函数(例程)
3.3.1 命名/格式化
例程的名字永远应该以大写的字母开头并且中间错落分明以便于可读性。 下面是一个不正确 格式的过程名称: procedure thisisapoorlyformattedroutinename; 下面是一个合适的大小写例程名称的例子: procedure ThisIsMuchMoreReadableRoutineName; 例程的名称应该同它的内容相符。一个会导致某个行为的例程应以动词开头。例如: procedure FormatHardDrive; 一个用于设置输入参数的例程应以单词 set 作为前缀,例如: procedure SetUserName; 一个用来接收某个值的例程应以单词 get 作为前缀,例如: procedure GetUserName : string;
3.3.2 形式参数
3.3.2.1 格式化 如果有的话,相同类型的形参应合并在一个语句中: procedure Foo(Param1, Param2, Param3 : Integer; Param4 : string); 3.3.2.2 命名 所有形参的名字应是十分符合它们所代表的意义, 特别是应该以传送到例程中的标志符的名 称为基础。一个好的参数名称应以字符 a 为前缀 - 例如: procedure SomeProc(aUserName : string; aUserAge : integer); “a”前缀按约定表示该参数的名称是与类类型中的一个属性或域的名称相对应的。 3.3.2.3 参数的排序 下面的形参的顺序重点说明了
注册者调用约定调用的好处。 - 最
常用的参数应放在第一位,其它的参数应按从左到右的顺序排列。
第 6 页 共 27页
- 输入参数列表应放在输出参数
列表的左边。 - 将通用的参数放在特殊参数的左边,例如: procedure SomeProc(aPlanet, aContinent, aCountry, aState, aCity) - 排序有可能有些例外,比如事件的处理。类型为 TObject 的 Sender 参数经常放在第 一位。 3.3.2.4 常量参数 当一个参数为记录型、数组类型、ShortString、或接口类型并且在例程中不被改变时, 这些参数应做上常量标记。 这样做会让编译器更加有效率的产生有关这些不改变的参数的代 码。 而例程中另外一些非变参数也可常量来传送。 尽管这样做没有产生任何效果和提高效率, 这 将会给调用例程的使用者提供更多的信息。 3.3.2.5 名称的冲突 当使用拥有两个名称相同的例程的两个单元时,如果你调用该例程时,在 uses 子句中排在 后面的单元中的例程将会被调用。为了解决这种“在 uses 子句上的模糊”冲突,要在调用 该例程时写上相关的单元的前缀,例如: SysUtils.FindClose(SR); 或 Windows.FindClose(Handle);
3.4 变量
3.4.1 变量的命名和格式
变量的命名应以使用它们的目的相符 循环控制变量应采用一个单独的字符作为名字,比如 I,J,或 K,也可以采用更加有意义 的名字,比如 UserIndex。 逻辑变量的名字应能充分表达准确的真或假的意思。
3.4.2 局部变量
一个过
程中的局部变量应遵循所有其它变量的使用和命名约定。 临时变量的取名应合理。 局 部变量应加上前缀 tmp,如 tmpUserName。 如果必须的话,在一进入例程就应初始化局部变量。局部的 AnsiString 变量会自动初始 化为一个空的字符串。 局部接口和派分接口类型变量将会自动初始化为 nil, 并且局部变数和 ole 变数类型变量会
第 7 页 共 27页
自动初始化为 Unassigned
3.4.3 全局变量的使用
使用全局变量是不推荐的。但是,在某些时候还是必须使用,而且它们也只应在必须使用的 时候才使用。在这种时候,你应努力只在一段上下文范围内使用全局变量。例如,一个全局 变量只应在一个单元的 implemntation 部分内是全局的。如果打算在多个单元类使用全 局数据,你应将它们移到一个公共的单元中然后被其它所有单元使用。 全局变量可以在 var 子句中直接初始化为一个值。记住,所有的全局数据会自动初始化为 0,因此不要将全局变量初始化为一个“空”值比如 0、nil、’’、Unassigned、等等。这 样做的一个理由是因为零-初始化的全局数据在 exe 文件中不会占据任何空间。零-初始 化数据被存储在一个虚拟的数据段, 它在应用程序启动后被分配在一段内存中。 非零-初始 化的全局数据在硬盘的 exe 文件占用空间。 全局变量命名应加上前缀 glb,如 glbUserName。
3.5 类型
3.5.1 大写约定
如果类型的名字是保留字,那么它应全部小写。Win32 API 类型通常全部大写,并且你必须 遵循在 Windows.pas 或其他 API 单元中的详细类型名称的约定。 对于其他变量名字, 第一个 字母应为大写,而其他字母应错落有致。下面是一些例子: var MyString : string; WindowHandle : HWND; I : Integer; 3.5.1.1 浮点指针类型 不推荐使用 Real 类型, 因为它的存在只是为了向前兼容早期的 Pascal 代码。 在通常情况 下用 Double 来实现浮点指针的需要。并且,Double 对处理器和总线而言是做了最优化处 理的, 它也是 IEEE 中定义的标准数据格式。 只有当需要的范围超出 Double 所定义的范围 时才使用 Extended。Extended 是 intel 定义的类型且在
Java 中不支持。只有当浮点 指针