1、过程procedure
声明语法:
procedure 过程名(参数表);
var
局部声明部分
begin
过程体语句块
end;
2、函数function
声明语法:
function 函数名(参数表):返回值数据类型;
var
局部声明部分
begin
函数体语句块
end;
3、参数类型
(1)值参数:在过程或函数内的更改不会改变外部值。
procedure Test(A: Integer);
begin
A := 10;
end;
(2)引用参数:在过程或函数内部的更改会改变外部值。使用var关键字。
procedure Test(var A: Integer);
begin
A := 10;
end;
【注意】通过引用参数可以实现返回多个值。
(3)常量参数:在过程或函数内部的不能更改。使用const关键字。
procedure Test(const A: Integer);
begin
A := 10; //出错!!!
end;
【注意】const参数是被编译器优化的,不可以赋值
(4)开放数组参数:就是一个固定类型开放数组的元素,但是数组中的元素个数是未知数。
function Sum(const A: array of Integer): Integer;
var
I: Integer;
begin
Result := 0;
for I := Low(A) to High(A) do
Result := Result + A[I];
end;
(5)类型变化的开放数组参数(了解):同开放数组参数,只是非固定类型。
function Sum(const A: array of const): Integer;
var
I: Integer;
begin
Result := 0;
for I := Low(A) to High(A) do
begin
case A[I].VType of
vtInteger: Result := Result + A[I].VInteger;
vtString, vtAnsiString: Result := Result + StrToIntDef((A[I].VString^), 0);
end;
end;
4、函数重载
函数重载允许你用同一名字定义多个函数或过程,只要它们所带的参数不同。
function Min(A ,B: Integer): Integer; overload;
function Min(A ,B: Int64): Int64; overload;
function Min(A, B: Single): Single; overload;
function Min(A, B: Double): Double; overload;
function Min(A, B: Extended): Extended; overload;
声明重载函数有两条原则:
1)后面必须添加overload关键字。
2)参数个数或(和)参数类型必须不同。
5、默认参数
使用规则:
1)如果要省略一个参数,必须省略它后面所有的参数。
2)带默认值的参数必须放在其他参数的最后面。
3)默认值必须是常量。显然,这限制了默认参数的数据类型,例如动态数组和界面类型的默认参数值只能是nil;至于记录类型,则根本不能用作默认参数。
4)默认参数必须通过值参或常参传递。引用参数var不能有默认值。
【注意】默认参数可以不传入,也可以写Default。