2.1.8.4 過程和函數的語句部分
過程或函數的語句部分由begin開始,end結束。函數需要一個返回值。可以將返回值賦給函數名稱,也可以將返回值賦給Result變量。下面的例程將返回值賦給函數名稱:
function CalculateInterest(Principal,InterestRate: Double):Double;
begin
CalculateInterest := Principal * InterestRate;
end;
將返回值賦給Result變量也是可以的,則上面的程序改為:
Result := Principal*InterestRate;
下面是這個函數的調用方法:
InterestEarned :=CalculateInterest(2000,0.012);
在Implementation後面的過程和函數,可以且只能被此庫單元的事件處理過程使用。要讓過程和函數可以被其他的程序庫單元使用,則需要將過程或函數的標題部分放在庫單元中的interface部分,而把含標題的整個過程或函數放在庫單元的inplementation部分,並在要訪問這個過程或函數的庫單元的uses子句中加入說明這個過程或函數的庫單元名稱。
2.1.8.5 函數的遞歸調用
在Object Pascal中,過程或函數必須先說明再調用。上文的NoValue函數必須在使用它的事件處理過程之前說明和執行,否則程序會報告一個未知標識符的錯誤。
以上規則在遞歸調用時是例外情況。所謂遞歸調用,是指函數A調用函數B,而函數B又調用函數A的情況。在遞歸調用中,函數要進行前置,即在函數或過程的標題部分最後加上保留字forWord。下文的例程是一個遞歸調用的典型例子:
…
implementation
var
alpha:Integer;
procedure Test2(var A:Integer):forWord;
{Test2被說明為前置過程}
procedure Test1(var A:Integer);
begin
A :=A-1;
if A>0 then
test2(A); {經前置說明,調用未執行的過程Test2}
writeln(A);
end;
procedure Test2(var A:Integer);{經前置說明的Test2的執行部分}
begin
A :=A div 2;
if A>0 rhen
test1(A); {在Test2中調用已執行的過程Test1}
end;
procedure TForm1.Button1Click(Sender:TObject);
begin
Alpha := 15; {給Alpha賦初值}
Test1(Alpha); { 第一次調用Test1,遞歸開始}
end;
按鈕的OnClick事件處理過程給Alpha賦初值,並實現先減1再除2的循環遞歸調用,直到Alpha小於0為止。
2.1.8.6 過程和函數的參數
當您的程序代碼在調用一個過程或函數時,通常用參數傳遞數據到被調用的過程或函數中。最常用的參數有數值參數、變量參數和常量參數三種。
由被調用過程或函數定義的參數為形參,而由調用過程