這裡主要討論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_2();
{ 傳地址方法調用
1、swapInteger() 交換函數
2、調用IntToStr() 方法將整型轉換為字符串類型
}
nVar1 := 10;
nVar2 := 20;
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(100);
//演示輸出參數的調用情況
WriteLn('Before call outProcedure(), nVar2 = ' + IntToStr(nVar2));
outProcedure(1000,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}
3、forward關鍵字可以用來聲明方法或者函數, 和C語言一樣方法或者函數必須先定義
後才能使用,而有時候可能需要推遲一下定義函數或方法,這時就可以利用forward
關鍵字先聲明函數或方法,有點像C語言中先聲明函數的原型。
*)
{
下面的函數演示forward的用法
}
procedure forwardKey_2();
{ 方法或者函數的參數傳遞方式
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,255);
WriteLn(strPath);
//申請內存後,輸出全為 ????, 因此利用函數進行清零
FillMemory(@strPath,255,0);
//獲取當前工作路徑, 調用Win32 API
GetCurrentDirectory(255,PWideChar(strPath));
currentPath:=strPath;
WriteLn(currentPath);
{ 命令行參數
1、Delphi程序也能獲取命令行參數
2、通過 SysUtils 單元中的 ParamStr() 函數獲取命令行參數
3、命令行參數編號從 0 開始, ParamStr()獲取傳遞給應用程序的第一個參數
}
//通過調用Delphi提供的函數獲取當前路徑,帶目錄分隔符 \
currentPath := ExtractFilePath(ParamStr(0));
WriteLn(currentPath);
//不帶目錄分隔符 \
currentPath := ExTractFileDir(ParamStr(0));
WriteLn(currentPath);
end;
{ forward關鍵字的使用
1、如下所示,如果不用關鍵字 forward 就會編譯出錯
2、這裡表示 forwardKey_1() 先聲明原型然後再定義
3、如果將下面一行聲明全注釋,則在 forwardKey_2()中會提示 forwardKey_1()
沒有定義
}
procedure forwardKey_1();forward;
procedure forwardKey_2();
begin
WriteLn('Call forwardKey_1() by used forward keyword.');
forwardKey_1();
end;
procedure forwardKey_1();
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 := 100;
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.
歡迎轉載,轉載請注明來源。