這裡主要討論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.
歡迎轉載,轉載請注明來源。