Delphi 系統[15]關鍵字和保留字 procedure、function、forward、out - 函式、過程相關
阿新 • • 發佈:2021-08-11
Delphi 系統[15]關鍵字和保留字 procedure、function、forward、out -函式、過程相關
1、定義:
- procedure:定義過程,過程無返回值。主要用來執行一系列動作。還可以用來宣告自定義函式型別。
- function:定義函式,函式有返回值。主要用來計算某一結果。還可以用來宣告自定義函式型別。
- forward:用於函式(或過程)的前置宣告,這樣可以使程式碼中“較先實現的函式”可以呼叫“較後實現的函式”,如果“較後實現的函式”不做前置宣告,則它不能被前面的函式呼叫。
- out:定義函式(或過程)的引數為傳出型別,out型別的引數用來將函式的執行結果通過此引數返回給呼叫者(傳地引數)。
- 呼叫者在呼叫函式時,不需要給out型別的引數賦值,賦了也沒用。
- 與關鍵字var 比較,var:定義函式(或過程)的引數為傳址型別,var型別的引數在函式內的一切改變都會返回給呼叫者,呼叫者也可以在呼叫函式前,給var引數賦值,然後傳遞到函式裡面使用。
2、示例:
{函式前置宣告 forward; } function CalcP(R: Double): Double; forward; function CalcA(R: Double): Double; forward; { 過程:執行一系列動作,顯示圓的半徑、周長、面積資訊 } procedure ShowInfo(Radius: Double); var sRadius: string; sPerimeter: string; sArea: string; begin sRadius := FloatToStr(Radius); { 如果不做前置宣告,則這裡無法呼叫CalcP函式,因為函式在ShowInfo之後 } sPerimeter :=FloatToStr(CalcP(Radius)); { 如果不做前置宣告,則這裡無法呼叫CalcA函式,因為函式在ShowInfo之後 } sArea := FloatToStr(CalcArea(Radius)); ShowMessage('半徑:' + sRadius + #13#10 + '周長:' + sPerimeter + #13#10 + '面積:' + sArea); end; { 函式:計算圓的周長 } function CalcPerimeter(R: Double): Double; begin { 2 乘以 派 乘以 半徑,Pi 是系統函式,計算圓周率 } Result := 2 * Pi *R; end; { 函式:計算圓的面積 } function CalcArea(R: Double): Double; begin { 派 乘以 半徑的平方,Pi 是系統函式,計算圓周率 } Result := Pi * R * R; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowInfo(10.5); ShowInfo(30.25); end; { 宣告自定義函式型別 TMyFunc } type TMyFunc = function(I:Integer): Integer; { 某個函式 } function GetCountNum(Num: Integer): Integer; var I: Integer; begin Result := 0; for I := 0 to Num do begin Result := Result + I; end; end; { 自定義函式型別一般用作函式或過程的引數 } procedure TForm1.Button1Click(Sender: TObject); var MyFunc: TMyFunc; iCountNum: Integer; begin { 將某個同類型的函式賦值給MyFunc,要保證函式一致 } MyFunc := GetCountNum; { 然後 MyFunc 就可以像普通函式一樣使用 } iCountNum := MyFunc(100); Caption := IntToStr(iCountNum); { 結果:5050 } end; { var 和 out 的使用} { 過程是沒有返回值的,但是我們可以通過 var 或 out 引數來返回資料 } procedure Test(var I: Integer; out S: String); begin { 檢視傳進來值 } ShowMessage('引數I:' +IntToStr(I) + #13#10 + '引數S:' +S); { S 將為空 } { 修改引數的值,看能否傳遞到過程外面去 } I := I + 100; S := S + 'TaoRoy'; { 如果我們將這一行程式碼註釋掉,則 S 將返回空字串 } end; procedure TForm1.Button1Click(Sender: TObject); var A: Integer; B: String; begin A := 1; B := 'ABC'; Test(A, B); { 'ABC' 無法傳入到函式中 } Caption := IntToStr(A ) + ' ' +B; { 結果 101 TaoRoy } end;
建立時間:2021.08.11 更新時間:
部落格園 滔Roy https://www.cnblogs.com/guorongtao 希望內容對你所有幫助,謝謝!