类型的参数希望不被例程所修改,也可以标上const。尽管这对效率没有影响,但这给例程的调用者带来了更多的信息。
■ 命名冲突
当两个单元中含有相同名称的例程时,如果调用该例程,实际被调用的是uses子句中最后出现的那个单元中的例程。为避免这种情况,可在方法名前加想要的单元名,例如:
SysUtils.FindClose(SR);
或
Windows.FindClose(Handle)
2.4 变量
2.4.1 变量的命名与格式
变量的名称应当能够表达出它的用途。
循环控制变量常常为单个字母,诸如I、J或K。也可以使用更有意义的名称,例如UserIndex。布尔变量名必须能清楚表示出True和False值的意义。
2.4.2 局部变量
局部变量用于例程内部,遵循其他变量的命名规则。
局部变量加前缀l_(循环控制变量除外),如l_UserName。
如果需要的话,应当在例程的入口处立即初始化变量。局部的AnsiString类型的变量自动被初始化为空字符串,局部的接口和调度接口类型的变量自动被初始化为nil,局部的Variant和OleVariant类型的变量自动被初始化为Unassigned。
2.4.3 全局变量
一般不鼓励使用全局变量。不过,有时候需要用到。即使如此,也应当把全局变量限制在需要的环境中。例如,一个全局变量可能只在单元的Implementation部分是全局的。
全局数据如果将由许多单元使用,就应移动到一个公用单元里被所有对象使用。
全局数据可在声明时直接初始化为一个值。注意,所有全局变量自动进行零初始化,因此,不要将全局变量初始化为诸如0、nil、’’或Unassigned等空值。零初始化的全局变量在.EXE文件中不占空间
。零初始化的数据保存在虚拟的数据段中,而虚拟数据段只在应用
程序启动时才分配内存。非零初始化的全局数据则在.EXE文件中占空间。
2.5 常量(const)
常量的命名应当能够表达出它的用途。
如果有类别,该类别的所有常量加前缀,前缀为类别缩写的小写字母;例如:对于文件打开方式(File Open Modes),定义常量:
fmOpenRead = $0000;
fmOpenWrite = $0001;
如果无类别,常量的前缀为con。例如:conProductName = ‘GBG2000’;
2.6 资源串(resourcestring)
如果在模块中有提示信息类的字符串,把该字符串定义为资源串。
资源串的命名应当能够表达出它的用途。
如果有类别,该类别的所有资源串加前缀,前缀为类别缩写的小写字母,同常量定义。
如果无类别,资源串的前缀为rs。例如:rsFileOpenError = ‘文件打开失败 !’;
2.7 类型
2.7.1 大小写规则
类型标识符是保留字,应当全部小写。Win32 API类型常常全部大写,并且遵循诸如Windows.pas或其他API单元中关于特定类型名的规则。对于其他变量名,第一个字母应大写,其他字母则大小写交错。
下面是一些例子:
var
Mytring: string; // 保留字
WindowsHandle: HWND; // Win32 API 类型
i: Integer; // 在System单元中介绍的类型标识
2.7.2 浮点型
不鼓励使用Real类型,因为它只是为了与老的Pascal代码兼容而保留的。通常情况下对于浮点数应当使用Double。Double可被处理器优化,是IEEE定义的标准的数据格式。当需要比Double提供的范围更大时,可以使用Extend。Extend是Intel专用的类型,
Java不支持。当浮点变量的物理字节数很重要时(可能使用其他语言编写的DLL),则应当使用Single。
2.7.3 枚举型
枚举类型名必须代表枚举的用途。名称前要加T字符作为前缀,表示这是个数据类型。枚举类型的标识符
列表的前缀应包含2~3个小写字符,来彼此关联。例如:
TSongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMeta1, stRB);
枚举类型的变量实例的名称与类型相同,但没有前缀T,除非为了给变量一个更加特殊的名称,诸如FavoriteSongType1、FavoriteSongType2等。
2.7.4 Variant