正确的写法:
procedure thisisapoorlyformattedroutinename;
改成这样写就对了:
procedure ThisIsMuchMoreReadableRoutineName;
□ 形参
● 格式
只要可能,同一类型的形参应当归并在一起:
procedure Foo(Param1,Param2,Param3:Integer;Param4:string);
● 参数顺序
形参的顺序主要要考虑寄存器调用规则。最
常用的参数应当作为第一个参数,按使用频率依次从左到右排。输入参数位于输出参数之前。范围大的参数应当放在范围小的参数之前。例如:
SomeProc(aPlanet, aContinent, aCountry, aState, aCity).
有些则例外。例如,在事件处理过程中,TObject 类型的Sender 参数往往是第一个要传递的参数。
● 常量参数
要使记录、数组、短字符串或接口类型的参数不能被过程修改,就应当把形参标以Const 。这样,编译器将以最有效的方式生成代码,保证传递的参数不可变。 如果其他类型的参数希望不被过程所修改,也可以标上Const 。尽管这对效率没有影响,但这给过程的调用者带来了更多的信息。
2.2.4变量
□ 局部变量
局部变量用于过程内部,如果需要的话,应当在过程的入口处立即初始化变量。局部的AnsiString 类型的变量自动被初始化为空字符串,局部的接口和dispinterface类型的变量自动被初始化为nil,局部的Variant和OleVariant类型的变量自动被初始化为Unassigned。
□ 全局变量
一般不鼓励使用全局变量。不过,有时候需要用到。即使如此,也应当把全局变量限制在需要的环境中。例如,一个全局变量可能只在单元的实现部分是全局的。
全局变量如果将由
许多单元使用,就应移动到一个公用单元里被所有对象使用。全局变量可在声明时直接初始化为一个值。注意,所有全局变量自动进行零初始化,因此,不要将全局变量初始化为诸如0 、nil、或Unassigned等空值。零初始化的全局变量在.EXE文件中不占空间。零初始化的数据保存在虚拟的数据段中,而虚拟数据段只在应用程序启动时才分配内存。非零初始化的全局数据则在.EXE文件中占空间。
2.2.5类型
□ 大小写规则
类型标识符是保留字,应当全部小写。Win32 API 类型常常全部大写,并且遵循诸如Windows.pas或其他API单元中关于特定类型名的规则。对于其他变量名,第一个字母应大写,其他字母则大小写交错。下面是一些例子:
var
MyString: string; // 保留字
WindowsHandle: HWND; // Win32 API 类型
I: Integer; //在System单元中引入的类型标识
□ 浮点型
不鼓励使用Real类型,因为它只是为了与老的Pascal代码兼容而保留的。通常情况下,对于浮点数应当使用Double。Double可被处理器优化,是IEEE定义的标准的数据格式。当需要比Double提供的范围更大时,可以使用Extend。Extend是intel专用的类型,
Java不支持。当浮点变量的物理字节数很重要时(可能使用其他语言编写DLL),则应当使用Single。
□ Variant和OleVariant
一般不建议使用Variant和OleVariant。但是,当数据类型只有在运行期才知道时(常常是在COM和数据库应用的程序中),这两个类型对编程就有必要。当进行诸如自动化ActiveX控件的COM编程时,应当使用OleVariant;而对于非COM编程,则应当使用Variant。这是因为,Variant能够有效地保存Delphi的原生字符串,而OleVariant则将所有字符串转换为OLE字符串(即WideChar字符串),且没有引用计数功能。
2.2.6语句
□ IF语句
在if/then/else语句中,最有可能执行的情况应放在then子句中,不太可能的情况放在else子句中。为了避免出现许多if语句,可以使用case语句代替。如果多于5级,不要使用if语句。请改用更清楚的方法。不要在if语句中使用多余的括号。
如果在if语句中有多个条件要测试,应按照计算的复杂程度从右向左排。这样,可以使代