函数或过程可以有缺省参数(default parameters),正如其名称一样,如果函数或过程在调用时没有指定参数,它就会为函数提供一个缺省值。
为了声明一个有缺省值的过程或函数,在参数类型后跟一个等号和缺省值。
下面照惯例,举一个比较完整的例子,来实现一个加法的程序,默认是两个数相加,但是也能实现三个数相加的功能。
1、新建一个Console Application。
2、在代码中输入以下代码,创建一个AddInts函数,用来实现数的相加,如下:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
{ AddInts函数中第三个参数I3默认值为0}
function AddInts(I1, I2: Integer; I3: Integer = 0): Integer;
begin
Result := I1 + I2 + I3;
end;
var
I1, I2, I3: Integer;
JG: Integer;
begin
I1 := 123;
I2 := 321;
I3 := 555;
JG := AddInts(I1, I2); { 实现两个数相加 I1 + I2}
Writeln(IntToStr(I1) + ' + ' +
IntToStr(I2) + ' = ' +
IntToStr(JG)); { 输出 I1 + I2 = JG}
JG := AddInts(I1, I2, I3);{ 实现三个数相加 I1 + I2 + I3}
Writeln(IntToStr(I1) + ' + ' +
IntToStr(I2) + ' + ' +
IntToStr(I3) + ' = ' +
IntToStr(JG)); { 输出 I1 + I2 + I3 = JG}
Readln;
end.
3、运行结果如下:
4、有缺省值参数的最大好处是,在向一个已存在的过程和函数增加功能时,不必关心向后兼容的问题,就像上面的AddInts函数一样,增加一个具有缺省值的第三个参数,就能把AddInts函数扩展而不必担心它的兼容问题。
Note
任何缺省参数只能放在函数或过程参数表的结尾,下面的代码就是一个无效的函数声明:
procedure MyProcedure(X: Integer; Y: Integer = 10; Z: Integer);
编译以上声明,将会报出“Default value required for ‘Z’”错误,如果要想成功编译这个函数声明,就必须把缺省参数移动到参数表的末尾,如下:
procedure MyProcedure(X: Integer; Z: Integer; Y: Integer = 10);
以上代码均在Delphi7中测试通过。