这里主要讨论Delphi中函数、方法的相关内容。

一、工程文件

{       Delphi语法方法和函数
1、方法
2、函数
} program Routine; {$APPTYPE CONSOLE} uses
SysUtils,
Unit1 in 'Unit1.pas'; { 方法
1、在工程文件中定义方法不需要在接口声明
}
procedure foo();
begin
WriteLn('这是在工程文件中定义的方法');
end; var
nVar1:integer;
nVar2:integer;
varString:string; begin
//调用工程文件中的方法
foo(); //调用单元文件unit1中的方法
//writeCurrentDir(); forwardKey_(); { 传地址方法调用
1、swapInteger() 交换函数
2、调用IntToStr() 方法将整型转换为字符串类型
}
nVar1 := ;
nVar2 := ;
varString := 'Before swap nVar1 =' + IntToStr(nVar1) +' ;nVar2 =' +
IntToStr(nVar2);
WriteLn(varString);
//调用的时候,参数列表中的参数用 逗号分隔
swapInteger(nVar1,nVar2);
varString := 'After swap nVar1 =' + IntToStr(nVar1) +' ;nVar2 =' +
IntToStr(nVar2);
WriteLn(varString); //演示传值参数的调用情况
varString := 'In the call function the value of nVar1 = ' + IntToStr(nVar1);
WriteLn('Befor call valueProcedure');
WriteLn(varString);
valueProcedure(nVar1); varString := 'In the call function the value of nVar1 = ' + IntToStr(nVar1);
WriteLn('After call valueProcedure');
WriteLn(varString); //演示常量参数的调用情况
constProcedure(); //演示输出参数的调用情况
WriteLn('Before call outProcedure(), nVar2 = ' + IntToStr(nVar2));
outProcedure(,nVar2);
WriteLn('After call outProcedure(), nVar2 = ' + IntToStr(nVar2)); ReadLn;
end.

二、单元文件 unit1

{       方法和函数
1、方法
2、函数
} unit Unit1; interface uses
Windows, //Win32 API
SysUtils; //Delphi系统功能 { 方法
1、在单元文件中,必须如果要被其他文件引用,则方法必须在接口部分声明原型
2、定义方法的关键字是procedure
}
procedure writeCurrentDir(); (* 其他关键字
1、external用于引用其他编译单元的函数或方法,例如引用DLL、其他obj文件的函数
2、如果要引用其他obj文件的函数或方法,则需要使用引用其他obj文件,通过编译开关
{$L BLOCK.obj}
、forward关键字可以用来声明方法或者函数, 和C语言一样方法或者函数必须先定义
后才能使用,而有时候可能需要推迟一下定义函数或方法,这时就可以利用forward
关键字先声明函数或方法,有点像C语言中先声明函数的原型。
*)
{
下面的函数演示forward的用法
}
procedure forwardKey_(); { 方法或者函数的参数传递方式
1、按地址传递, 在定义参数的时候使用关键字 var
2、按值传递,不用其他关键字,默认的传递方式
3、按常量方式传递, 利用关键字 const 定义形式参数
4、按输出方式传递, 利用关键字 out 来定义形参
5、参数列表的分隔符是分号 ; 注意这个与C语言的区别
}
{ 演示按地址传递方式的方法
1、利用关键字 var 定义形式参数
2、交换两个变量的值, 经典函数swap
3、要注意与传递指针的区别
}
procedure swapInteger(var nVar1:integer;var nVar2:integer); //procedure swapIntegerByPointer(); { 传值方式
1、传值方式为默认的传递方式
}
procedure valueProcedure(nVar:integer); { 常量方式传递参数
1、这个函数演示按常量方式传递参数
}
procedure constProcedure(const nVar:integer); { 输出参数
1、在Delphi中默认的是方法不能返回值到调用函数,函数可以返回值到调用函数
2、函数通过函数名返回值,或者通过缺省的result变量返回值。
3、还有一种方式可以返回值,就是定义输出参数
4、输出参数用 out 关键字定义
5、注意输出参数和传地址、指针变量的区别
}
procedure outProcedure(nVar1:integer;out nVar2:integer); implementation procedure writeCurrentDir();
//在过程中定义,过程作用域的局部变量
var
strPath:WideString;
currentPath:ansistring;
nPathLen:integer;
begin
//要使用字符串必须先初始化,如果没有初始化的话就必须先申请内存
SetLength(strPath,);
WriteLn(strPath); //申请内存后,输出全为 ????, 因此利用函数进行清零
FillMemory(@strPath,,); //获取当前工作路径, 调用Win32 API
GetCurrentDirectory(,PWideChar(strPath));
currentPath:=strPath;
WriteLn(currentPath); { 命令行参数
1、Delphi程序也能获取命令行参数
2、通过 SysUtils 单元中的 ParamStr() 函数获取命令行参数
3、命令行参数编号从 0 开始, ParamStr()获取传递给应用程序的第一个参数
}
//通过调用Delphi提供的函数获取当前路径,带目录分隔符 \
currentPath := ExtractFilePath(ParamStr());
WriteLn(currentPath); //不带目录分隔符 \
currentPath := ExTractFileDir(ParamStr());
WriteLn(currentPath);
end; { forward关键字的使用
1、如下所示,如果不用关键字 forward 就会编译出错
2、这里表示 forwardKey_1() 先声明原型然后再定义
3、如果将下面一行声明全注释,则在 forwardKey_2()中会提示 forwardKey_1()
没有定义
}
procedure forwardKey_();forward; procedure forwardKey_();
begin
WriteLn('Call forwardKey_1() by used forward keyword.');
forwardKey_();
end; procedure forwardKey_();
begin
WriteLn('This is forwardKey_1().');
end; { 传地址方式例子
1、swap 函数
}
procedure swapInteger(var nVar1:integer;var nVar2:integer);
var
nVar:integer;
begin
nVar := nVar1;
nVar1 := nVar2;
nVar2 := nVar1;
end; { 传值方式的例子
1、直接输出参数
}
procedure valueProcedure(nVar:integer);
var
str:string;
begin
str:='Before change in function valueProcedure nVar= ' + IntToStr(nVar);
WriteLn(str); nVar := ;
str := 'After change in function valueProcedure nVar= ' +IntToStr(nVar);
WriteLn(str);
end; { 常量方式的参数
1、用于保护不让在函数里面改变传递给实际参数的值
2、这里有一点与C语言里面类似,就是指针的指向和指针指向变量的值的关系,需要注意
}
procedure constProcedure(const nVar:integer);
var
nVar1:integer;
begin
//因为形式参数 nVar 定义为 const,所以下面的语句编译不能成功
//nVar:=300; //可以访问变量。
nVar1:= nVar;
WriteLn('nVar1 = ' + IntToStr(nVar1));
end; { 输出参数
1、输出参数的定义用关键字 out 实现
2、如果接触过西门子PLC的话,就会很容易理解输出参数的用法
}
procedure outProcedure(nVar1:integer;out nVar2:integer);
begin
nVar2 := nVar1;
end; end.

  欢迎转载,转载请注明来源。

Delphi_07_Delphi_Object_Pascal_基本语法_05_函数参数的更多相关文章

  1. 【C/C++】引用&的含义/语法/作为函数参数/函数返回值/本质/常量引用

    含义 引用不产生副本,只是给原变量起了别名. 对引用变量的操作就是对原变量的操作. 基本语法 数据类型 &别名 = 原名 e.g. int a = 10; int &b = a; // ...

  2. Delphi_08_Delphi_Object_Pascal_基本语法_06_函数参数

    发现Delphi中关于函数参数部分的内容还是比较多的,暂时说到这篇随笔为止吧,以后再继续讨论一下函数的参数部分的内容. 一 工程文件 program DefaultParameter; {$APPTY ...

  3. C++中对C的扩展学习新增语法——内联函数以及函数参数

    内联函数以及函数参数 内联函数 使用 inline 关键字必须和函数体放在一起. 内联函数具有内部链接属性. 内联函数会被编译器在编译阶段替换到函数调用的地方. 可以把内联函数定义写到头文件中,多个c ...

  4. python基础语法5 函数定义,可变长参数

    函数 1.什么是函数 函数就是一种工具. 可以重复调用 2.为什么要用函数 1.防止代码冗(rong)余 2.代码的可读性差 3.怎么用函数 1.定义函数-->制造工具 2.调用函数--> ...

  5. Python基本语法_函数属性 & 参数类型 & 偏函数的应用

    目录 目录 前言 软件环境 Python Module的程序入口 函数的属性 Python函数的创建 函数的参数 必备参数 缺省参数 命名参数 不定长参数 匿名参数 偏函数的应用 前言 Python除 ...

  6. ES6新增语法(二)——函数和参数

    箭头函数 箭头函数:将原来函数的function关键字和函数名都删掉,并使用"=>"连接参数列表和函数体. 箭头函数语法: (参数1,参数2)=>{ 函数体 } 注意点 ...

  7. JS基础语法---函数---介绍、定义、函数参数、返回值

    函数: 把一坨重复的代码封装,在需要的时候直接调用即可 函数的作用: 代码的重用 函数需要先定义,然后才能使用 函数名字:要遵循驼峰命名法 函数一旦重名,后面的会把前面的函数覆盖 Ctrl +鼠标左键 ...

  8. 深入理解javascript函数参数与闭包(一)

    在看此文章,希望先阅读关于函数基础内容 函数定义与函数作用域 的章节,因为这篇文章或多或少会涉及函数基础的内容,而基础内容,我放在函数定义函数作用域 章节. 本文直接赘述函数参数与闭包,若涉及相关知识 ...

  9. Swift3.0P1 语法指南——函数

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

随机推荐

  1. 如果你也会C#,那不妨了解下F#(7):面向对象编程之继承、接口和泛型

    前言 面向对象三大基本特性:封装.继承.多态.上一篇中介绍了类的定义,下面就了解下F#中继承和多态的使用吧.

  2. 如何为你的微信小程序体积瘦身?

    众所周知,微信小程序在发布的时候,对提交的代码有1M大小的限制!所以,如果你正在写一个功能稍微复杂一点的小程序,就必须得时刻小心注意你的代码是不是快触及这个底线了. 在设计一个小程序之初,我们就需要重 ...

  3. 总结30个CSS3选择器

    或许大家平时总是在用的选择器都是:#id  .class  以及标签选择器.可是这些还远远不够,为了在开发中更加得心应手,本文总结了30个CSS3选择器,希望对大家有所帮助. 1 *:通用选择器 ;; ...

  4. SAP CRM 显示消息/在消息中进行导航

    向用户展示消息,在任何软件中都是十分重要的. 在SAP CRM WEB UI中展示消息,不是一项很难的任务,只需要创建消息并在之后调用方法来显示它 消息类和消息号: 我在SE91中创建了如下的消息类和 ...

  5. 跟着老男孩教育学Python开发【第一篇】:初识Python

    Python简介 Python前世今生 Python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解 ...

  6. Linux课堂笔记(一)

    一.Linux应用领域及版本介绍. 1.服务器.嵌入式.桌面应用等. (1)在服务器领域中,需要安全和稳定,特别是越老的内核版本越安全.越稳定. (2)Linux主要分内核版和发行版. 内核版本2.6 ...

  7. 理解Storm并发

    作者:Jack47 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 注:本文主要内容翻译自understanding-the-parall ...

  8. 开源发布:VS代码段快捷方式及可视化调试快速部署工具

    前言: 很久前,我发过两篇文章,分别介绍自定义代码版和可视化调试: 1:Visual Studio 小技巧:自定义代码片断 2:自定义可视化调试工具(Microsoft.VisualStudio.De ...

  9. 拥抱.NET Core,如何开发一个跨平台类库 (1)

    在此前的文章中详细介绍了使用.NET Core的基本知识,如果还没有看,可以先去了解“拥抱.NET Core,学习.NET Core的基础知识补遗”,以便接下来的阅读. 在本文将介绍如何配置类库项目支 ...

  10. Hadoop单机模式配置

    Required Software 1. 安装Java环境推荐的版本在链接中有介绍HadoopJavaVersions. 2. 安装ssh以使用hadoop脚本管理远程Hadoop daemons. ...