Pascal - 函式



子程式

子程式是一個執行特定任務的程式單元/模組。這些子程式組合起來形成更大的程式。這基本上稱為“模組化設計”。子程式可以由子程式/程式呼叫,該子程式/程式稱為呼叫程式。

Pascal 提供兩種子程式:

  • 函式 - 這些子程式返回單個值。

  • 過程 - 這些子程式不直接返回值。

函式

函式是一組語句,它們共同執行一項任務。每個 Pascal 程式至少包含一個函式,即程式本身,並且所有最簡單的程式都可以定義其他函式。

函式宣告告訴編譯器有關函式的名稱、返回型別和引數的資訊。函式定義提供了函式的實際主體。

Pascal 標準庫提供了許多內建函式,您的程式可以呼叫這些函式。例如,函式AppendStr()連線兩個字串,函式New()為變數動態分配記憶體,還有許多其他函式。

定義函式

在 Pascal 中,函式使用 function 關鍵字定義。函式定義的一般形式如下:

function name(argument(s): type1; argument(s): type2; ...): function_type;
local declarations;

begin
   ...
   < statements >
   ...
   name:= expression;
end;

Pascal 中的函式定義由函式頭部、區域性宣告和函式主體組成。函式頭部包含關鍵字 function 和賦予函式的名稱。以下是函式的所有部分:

  • 引數 - 引數建立了呼叫程式和函式識別符號之間的聯絡,也稱為形式引數。引數就像一個佔位符。當呼叫函式時,您會將一個值傳遞給引數。此值稱為實際引數或引數。引數列表指的是函式的引數型別、順序和數量。使用此類形式引數是可選的。這些引數可以具有標準資料型別、使用者定義的資料型別或子範圍資料型別。

    出現在函式語句中的形式引數列表可以是簡單變數或下標變數、陣列或結構化變數,或子程式。

  • 返回型別 - 所有函式都必須返回一個值,因此所有函式都必須分配一個型別。函式型別是函式返回的值的資料型別。它可以是標準的、使用者定義的標量或子範圍型別,但不能是結構化型別。

  • 區域性宣告 - 區域性宣告指的是標籤、常量、變數、函式和過程的宣告,這些宣告僅適用於函式體。

  • 函式體 - 函式體包含定義函式作用的一組語句。它應始終包含在保留字 begin 和 end 之間。它是函式中執行所有計算的部分。函式體中必須有一個型別為 name := expression; 的賦值語句,該語句將一個值賦給函式名。此值在執行函式時返回。主體中的最後一條語句必須是 end 語句。

以下是一個示例,演示如何在 pascal 中定義函式:

(* function returning the max between two numbers *)
function max(num1, num2: integer): integer;

var
   (* local variable declaration *)
   result: integer;

begin
   if (num1 > num2) then
      result := num1
   
   else
      result := num2;
   max := result;
end;

函式宣告

函式宣告告訴編譯器有關函式名稱以及如何呼叫函式的資訊。函式的實際主體可以單獨定義。

函式宣告具有以下部分:

function name(argument(s): type1; argument(s): type2; ...): function_type;

對於上面定義的函式 max(),以下是函式宣告:

function max(num1, num2: integer): integer;

當您在一個原始檔中定義一個函式並在另一個檔案中呼叫該函式時,需要函式宣告。在這種情況下,您應該在呼叫函式的檔案頂部宣告該函式。

呼叫函式

在建立函式時,您會給出函式必須執行的操作的定義。要使用函式,您必須呼叫該函式以執行定義的任務。當程式呼叫函式時,程式控制權將轉移到被呼叫函式。被呼叫函式執行定義的任務,當執行其 return 語句或到達其最後一個 end 語句時,它將程式控制權返回給主程式。

要呼叫函式,您只需將所需的引數與函式名稱一起傳遞,如果函式返回值,則可以儲存返回值。以下是一個簡單的示例,說明用法:

program exFunction;
var
   a, b, ret : integer;

(*function definition *)
function max(num1, num2: integer): integer;
var
   (* local variable declaration *)
   result: integer;

begin
   if (num1 > num2) then
      result := num1
   
   else
      result := num2;
   max := result;
end;

begin
   a := 100;
   b := 200;
   (* calling a function to get max value *)
   ret := max(a, b);
   
   writeln( 'Max value is : ', ret );
end.

當編譯並執行上述程式碼時,它會產生以下結果:

Max value is : 200 
廣告