对比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;