这里主要讨论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. BPM的魅力何在?

    BPM(Business Process Management , 企业流程管理平台) 是带动企业流程自动化的帮 手,也是最能忠实反应出企业作业流程问题症结的系统工具,在管理上,BPM可以让管理者利用 ...

  2. gulp 自动添加版本号

    本文介绍利用 gulp-rev 和 gulp-rev-collector 进行版本管理 npm官网介绍使用后的效果如下: "/css/style.css" => " ...

  3. mysql删除重复记录语句的方法

    例如: id name value 1 a pp 2 a pp 3 b iii 4 b pp 5 b pp 6 c pp 7 c pp 8 c iii id是主键 要求得到这样的结果 id name ...

  4. Ubuntu下配置apache开启https

    一.HTTPS简述随着网络的日常,信息安全越来越重要,传统的网站都是http协议明文传输,而HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,比http协议安全. 那ht ...

  5. JavaScript 写计算器改进版

    <html><head><style> .short{height:50px;width:55px;float:left;}</style></h ...

  6. js实现四大经典排序算法

    为了方便测试,这里写了一个创建长度为n的随机数组 function createArr(n) { var arr = []; while (n--) { arr.push(~~(Math.random ...

  7. angularJS(5)

    angularJS(5) 一,数据循环:特别要注意作用域 使用ng-repeat指令. <div ng-app="myApp" ng-controller="myC ...

  8. mono3.2.3+Jexus5.5+openSuSE13.1的asp.net

    读书的时候,我似乎有系统地学习过asp.net,但是基本已经还掉了...工作之后有做过一个内部用的网站,但也没有正式使用,的确只能算是个课程设计型的东西,不能做产品.后来工作需求是做Win8下的APP ...

  9. iOS开发系列--App扩展开发

    概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...

  10. 学习python

    最近感觉Python 很不错的样子,乘着这次寒假,不如就先学一下吧. 翻看了一些教程,发现<python 简明教程>质量上乘. 我目前学习python就是打算做一些上位机之类的,好像有点杀 ...