1. 程式人生 > 其它 >Delphi 系統[15]關鍵字和保留字 procedure、function、forward、out - 函式、過程相關

Delphi 系統[15]關鍵字和保留字 procedure、function、forward、out - 函式、過程相關

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 希望內容對你所有幫助,謝謝!