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 和函数的名称组成。 这是函数的所有部分 −

  • 参数 − 参数建立调用程序和函数标识符之间的链接,也称为形式参数。 参数就像一个占位符。 当调用函数时,您将一个值传递给参数。 该值被称为实际参数或实参。 参数列表是指函数参数的类型、顺序和数量。 此类形式参数的使用是可选的。 这些参数可以具有标准数据类型、用户定义数据类型或子范围数据类型。

    出现在函数语句中的形式参数列表可以是简单变量或下标变量、数组或结构化变量、或者子程序。

  • 返回类型 − 所有函数都必须返回一个值,因此所有函数都必须分配一个类型。 function-type 是函数返回值的数据类型。 它可以是标准的、用户定义的标量或子范围类型,但不能是结构化类型。

  • 局部声明 − 局部声明是指标签、常量、变量、函数和过程的声明,仅适用于函数体。

  • 函数体 − 函数体包含定义函数功能的语句集合。 它应始终包含在保留字 begin 和 end 之间。 它是完成所有计算的函数的一部分。 函数体中必须有一个类型为 - name := expression; 的赋值语句,为函数名称赋值。 该值在函数执行时返回。 正文中的最后一个语句必须是结束语句。

下面是一个示例,展示如何在 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;

当您在一个源文件中定义函数并在另一文件中调用该函数时,需要进行函数声明。 在这种情况下,您应该在调用该函数的文件顶部声明该函数。

调用函数

创建函数时,您需要定义该函数必须执行的操作。 要使用函数,您必须调用该函数来执行定义的任务。 当程序调用函数时,程序控制权将转移到被调用的函数。 被调用函数执行定义的任务,当执行其返回语句或到达最后一个结束语句时,它将程序控制权返回给主程序。

要调用函数,您只需传递所需的参数和函数名称,如果函数有返回值,则可以存储返回值。 以下是一个简单的例子来展示用法 −

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