function と Result 変数

手続き(procedure)は値を返す事は出来ませんが、関数(function)は値を返すことができます。返したい値は、 暗黙に宣言された変数 Result に代入します。この Result には何度も値を代入することができますが、 その場合、最後に Result に代入された戻り値となります。

function MyFunc(ParameterList): returnType;

ParameterListにパラメータを指定し、returnTypeに戻り値の型を指定します。簡単な例を見てみましょう。

function MyFunc(s: string): string;
begin
  // Result は、戻り値の型と同じです。
  // つまり、ここでは Return の型は string ということになります。
  Result := s + ' world';
end;
  
procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
  ReturnString: string;
begin
  s := 'Hello';
  
  // データ(文字列型の変数 s ) を関数 MyFunc に渡し
  // 再びそのデータを返してもらいます。
  ReturnString := MyFunc(s);
  
  ShowMessage(ReturnString);
end;

関数 MyFunc 内で変数宣言していない Result 変数を使用しています。Delphi では全ての関数は暗黙のうちに、その関数で指定した戻り値と同じ型をもつ Result 変数を宣言しています。この Result 変数は普通に変数宣言した変数と同じように使用でき、関数が戻るときには、この Result 変数の値が返る事になります。つまり、Result 変数に代入された値が、その関数が返す値ということになります。

少し簡単なサンプルを見てみましょう。ListBox を貼り付けて下さい。

  
function Add30(int: Integer): Integer;
begin
  Result := int + 30;
end;
  
function Add10(int : Integer): Integer;
begin
  Result := int + 10;
end;
  
procedure TForm1.Button1Click(Sender: TObject);
var
  Number, Sum: Integer;
begin
  Number := 0;
  
  Sum := Add10(Number);
  ListBox1.Items.Add(IntToStr(Sum));
 
  Sum := Add30(Number);
  ListBox1.Items.Add(IntToStr(Sum));
end;

次のサンプルは、Button1Click 内で関数を呼び出し、さらにその関数内で別の関数を呼び出している例です。

function Add30(int: Integer): Integer;
begin
  Result := int + 30;
end;
 
function Add10(int : Integer): Integer;
var
  TempNumber: Integer;
begin
  TempNumber := Add30(int);
  Result := TempNumber + 10;
  
  // 上の2行は、以下の1行で置き換えることができます。
  //  Result := Add30(int) + 10;
end;
  
procedure TForm1.Button1Click(Sender: TObject);
var
  Number, Sum: Integer;
begin
  Number := 0;
  
  Sum := Add10(Number);
  ListBox1.Items.Add(IntToStr(Sum));
end;

また、関数が値を返してくれる事を利用して、再帰的に関数を呼び出すこともあります。「再帰を見てみよう」では、関数を再帰的に呼び出しているサンプルがあります。


up next
Last update 2002/10/19