Delhpi中的函式與過程

2021-07-05 15:19:25 字數 3864 閱讀 5817

過程可以看作輕量級的函式。

從形式上講:過程強調處理事務的流程而不是結果,所以過程沒有返回值。而函式強調處理事務後的結果,所以有返回值。

從功能上講:函式可以用作類的構造器即建構函式,而過程不具備這種功能。

除此之外,函式與過程並沒有太大的差異。

注意:以下類容以函式為準,講解一些需要注意的事項。

function tform1.constfunction(const name: string): string;

begin

result := name;

end;

function tform1.normalfunction(name: string): string;

begin

name := '鬼a魅';

result := name;

end;

var

myvalue: integer = 2;//全域性變數

function tform1.addressfunction(var address: integer): integer;

begin

address := address * 2;

result := address;

end;

function tform1.valuefunction(value: integer): integer;

begin

value := value * 2;

result := value;

end;

procedure tform1.button1click(sender: tobject);

begin

//結果:2

showmessage(inttostr(myvalue));

//結果:4,函式addressfunction()在這裡會改變myvalue的值

showmessage(inttostr(addressfunction(myvalue)));

//結果:4

showmessage(inttostr(myvalue));

//結果:8

showmessage(inttostr(valuefunction(myvalue)));

//結果:4

showmessage(inttostr(myvalue));

end;

說明:可以通過陣列來傳遞引數個數或者引數型別不確定的引數列表

function tform1.lengthtypeparams(const myarray: array of const): integer;

var index: integer;

str: string;

begin

for index := low(myarray) to high(myarray) do

begin

case myarray [index].vtype of

vtinteger: str := inttostr(myarray [index].vinteger);

vtboolean: str := booltostr(myarray [index].vboolean);

end;

showmessage(str);

end;

end;

function tform1.lengthparams(const myarray: array of integer): integer;

var index: integer;

begin

for index := low(myarray) to high(myarray) do

showmessage(inttostr(myarray[index]));

end;

procedure tform1.button2click(sender: tobject);

begin

showmessage(booltostr(true));

lengthparams([1, 3, 5]);//結果為:1,3,5

lengthtypeparams([520, true]);//結果為:520, -1(true:-1;false:0);

end;

type

tvarrec = record

case byte of

vtinteger: (vinteger: integer; vtype: byte);

vtboolean: (vboolean: boolean);

vtchar: (vchar: char);

vtextended: (vextended: pextended);

vtstring: (vstring: pshortstring);

vtpointer: (vpointer: pointer);

vtpchar: (vpchar: pchar);

vtobject: (vobject: tobject);

vtclass: (vclass: tclass);

vtwidechar: (vwidechar: widechar);

vtpwidechar: (vpwidechar: pwidechar);

vtansistring: (vansistring: pointer);

vtcurrency: (vcurrency: pcurrency);

vtvariant: (vvariant: pvariant);

vtinte***ce: (vinte***ce: pointer);

end;

注意:宣告函式時需要給那些預設的引數賦初值

function withoutparams(param1: integer; param2: integer = 2; param3: integer = 3) : integer;

function tform1.withoutparams(param1, param2, param3: integer): integer;

begin

showmessage(inttostr(param1)+'|'+inttostr(param2)+'|'+inttostr(param3));

end;

procedure tform1.button3click(sender: tobject);

begin

withoutparams(1); //結果為:1|2|3

withoutparams(1, 4); //結果為:1|4|3

withoutparams(1, 4, 5); //結果為:1|4|5

end;

預設引數後面的引數都將預設。

說明:函式名字相同,引數列表不同。宣告時需要使用關鍵字overload對同名的函式進行標註。

function samenamefunction(): integer; overload;

function samenamefunction(param: integer): integer; overload;

public

function samenamefunction(): integer; overload;

function samenamefunction(param: integer): integer; overload;

函式與過程的區別

先思考一下,什麼是函式?函式是從乙個非空集合到另乙個非空集合的對映。所以,函式的特徵是對映!那再想想,在寫程式的時候,什麼樣才能稱之為對映?是不是應該有兩個集合在對應?那應該有哪兩個集合呢?想想一般寫函式,是不是有輸入引數和返回值?那,這兩個如果都是非空集合,不就構成了乙個從輸入空間到輸出空間的對映...

函式與儲存過程

函式是命名了的 儲存在資料庫中的 pl sql 程式塊。函式接受零個或多個輸入引數,有乙個返回值,返回值的資料型別在建立函式時定義。定義函式的語法如下 function name parameter parameter,return datatypes is local declarations b...

儲存過程與函式

一 儲存過程與函式的區別 1.一般來說,儲存過程實現的功能要複雜一點,而函式的實現的功能針對性比較強。2.對於儲存過程來說可以返回引數 output 而函式只能返回值或者表物件。3.儲存過程一般是作為乙個獨立的部分來執行,而函式可以作為查詢語句的乙個部分來呼叫,由於函式可以返回乙個表物件,因此它可以...