对比C++语言

delphi与c语言在这方面对不同有很多,比如:语法对不同(声明 参数等不同);c语言可以有返回值为空的函数,但是在delphi里叫过程 等等,但是他们核心想法一致的,比如 都可以重载 递归哇;本篇就总结一下delphi 函数和过程的用法。

如何声明和定义

声明过程:

procedure 过程名(形式参数1;形式参数2;....);指示字;
// 这里用每个参数之间分号隔开,但是调用的时候用逗号隔开

这里的指示字是指 overload 重载哇 巴拉巴拉的这个地方留着我后续补充把;
指示字没有特殊要求是不用写的;

定义过程

在 implementation 关键字写过程的定义部分

procedure 过程名(形式参数1;形式参数2;....);指示字;
var
   声明的变量;//这里是局部变量
begin
过程体;
end;

实例可以见我前面的第一个Delphi作业;

声明函数:

把过程的关键字换成Function,然后后面加一个返回值就变成函数的声明了。

Function 函数名(形式参数1;形式参数2;....):返回值类型;指示字;

定义过程

在 implementation 关键字写过程的定义部分

Function 函数名(形式参数1;形式参数2;....);返回值类型;指示字; 
var
   声明的变量;//这里是局部变量
begin
过程体;
end;

实例可以见我前面的第一个Delphi作业;

delphi函数的返回值

在C/C++等语言中,函数执行到 return 部分之后,将立即停止函数的执行,并返回值,并且只能有一个return(条件语句除外),在delphi,并没return,那么如何返回呢?有两种方法:
1.给函数名赋值(不提倡用)
2.给result赋值

函数中,执行到result时,并不同于比如 C/C++ 中的 return,跳出函数,而是会继续执行下去,直到函数结束

function(var A:string):string;
var S,S1,S2:string;
begin
  Result := '';    //此处将继续往下执行
......
  A:=S1;
......
  A:=S2;
......
  Result := S;    //跳出判断后,已经到程序结尾,过程结束。
end;

而且在上面的函数中,最终的返回值是最后一个Result的值

对参数的修饰

var 传入地址

我们在c语言中经常传入地址,那么在delphi里如何实现呢,我们只需要在传入的参数名前加一个var 就好了
例如

procedure PP(var a:integer);

这里我们就传入地址,在函数里操作改变了n,那么传入的n也会改变;

const 常量参数

在传入的参数前加一个 const 那么在这个函数/过程里就无法改变这个的参数的值

out 外部参数

个人还没有感觉这个out有啥用先把写在这里
Out参数会把初值舍弃,Out参数仅用作输出,不管外界输入的是啥,反正初值不影响我最后的输出;

例子

procedure OutValue(out v:string);
begin
  showMessage(v);
end;

在这里 我不管给v传入啥东西,反正最后v还是空字符串

重载

和c++的重载一样,只不过 后面要写指示字 overload;

procedure OutValue(out v:string);overload;

递归

和c++一样的,直接上例子把
写一个算阶乘的函数吧;

function factorial(n:Integer):Integer;
begin
  if n=0 then
    result:=1
  else
    Result:=n*factorial(n-1);
end;

结束

努力成长的程序员