過程可以看作輕量級的函式。
從形式上講:過程強調處理事務的流程而不是結果,所以過程沒有返回值。而函式強調處理事務後的結果,所以有返回值。
從功能上講:函式可以用作類的構造器即建構函式,而過程不具備這種功能。
除此之外,函式與過程並沒有太大的差異。
注意:以下類容以函式為準,講解一些需要注意的事項。
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.儲存過程一般是作為乙個獨立的部分來執行,而函式可以作為查詢語句的乙個部分來呼叫,由於函式可以返回乙個表物件,因此它可以...