//要點6: Result 可以參與運算, "函數名"不可以
function MyFun(x,y: Integer): Integer;
begin
Result := x + y;
Result := Result * 2;
end;
//要點7: 不僅如此, Result 還有更靈活的運用
function MyFun(b: Byte): Char;
begin
//Result := Char(b); {我們當然可以這樣寫}
Byte(Result) := b; {這樣也行}
end;
{System 中就有這樣一個函數}
function TObject.ClassType: TClass;
begin
Pointer(Result) := PPointer(Self)^;
end;
//要點8: 忘了寫返回值的函數, 也可以當過程用(沒有人會這樣做, 但 Delphi 竟然 也允許)
function MyFun(var x: Integer): string;
begin
x := x + 1;
end;
{調用}
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
i := 2;
MyFun(i);
ShowMessage(IntToStr(i)); {3}
end;
//要點9: 沒有參數的過程或函數, 在調用時可以省略 (); 也可以帶著
function MyFun: string;
begin
Result := 'ok';
end;
{調用}
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
s := MyFun;
ShowMessage(s); {ok}
s := MyFun();
ShowMessage(s); {ok}
end;
//要點10: 過程和函數都可以有一個或多個默認參數; 但必須在非默認參數後面
function MyFun(s1: string; s2: string='好人'): string;
begin
Result := s1 + s2;
end;
{調用}
procedure TForm1.Button1Click(Sender: TObject);
var
str1,str2: string;
begin
str1 := '萬一';
str2 := '壞蛋';
ShowMessage(MyFun(str1)); {萬一好人}
ShowMessage(MyFun(str1,str2)); {萬一壞蛋}
end;