Delphiにおける関数の種類とその活用方法

1. Delphiにおけるグローバル関数

グローバル関数は、他のユニットからも呼び出される場合、interfaceセクションで宣言する必要があります。ただし、uses節の後に記述する点に注意してください。


unit UnitSample;

interface

uses
  SysUtils, Classes;

function AddNumbers(a, b: Integer): Integer;

implementation

function AddNumbers(a, b: Integer): Integer;
begin
  Result := a + b;
end;

end.

2. ローカルスコープ内の関数

implementationセクション内で定義された関数やプロシージャは、そのユニット内でのみ使用可能です。


implementation

function InternalAdd(x, y: Integer): Integer;
begin
  Result := x + y;
end;

procedure TestProcedure;
var
  total: Integer;
begin
  total := InternalAdd(3, 4); // 7を返す
end;

end.

3. 内部関数(ネストされた関数)

Delphiでは、関数の中に別の関数を定義することもできます。


procedure TForm1.SampleButtonClick(Sender: TObject);
var
  procedure DisplayMessage(msg: String);
  begin
    ShowMessage(msg);
  end;
begin
  DisplayMessage('こんにちは');
end;

4. クラスのメンバ関数

クラス内で宣言された関数は、そのクラスのメソッドとして動作します。


type
  TMyClass = class
    function Multiply(x, y: Integer): Integer;
  end;

function TMyClass.Multiply(x, y: Integer): Integer;
begin
  Result := x * y;
end;

procedure TForm1.ButtonClick(Sender: TObject);
var
  obj: TMyClass;
  resultValue: Integer;
begin
  obj := TMyClass.Create;
  try
    resultValue := obj.Multiply(2, 3); // 結果は6
    ShowMessage(IntToStr(resultValue));
  finally
    obj.Free;
  end;
end;

5. クラスメソッド(静的メソッド)

クラスメソッドは、オブジェクトを作成せずに直接クラス名で呼び出すことができます。


type
  TUtilityClass = class
    class procedure ShowAlert(const msg: String);
  end;

class procedure TUtilityClass.ShowAlert(const msg: String);
begin
  ShowMessage(msg);
end;

procedure TForm1.CallClassMethod;
begin
  TUtilityClass.ShowAlert('警告メッセージ');
end;

6. 指針を使用したパラメータ操作

指針を使用することで、値を直接変更することが可能です。


function DoubleValue(p: PInteger): Integer;
begin
  if Assigned(p) then
    p^ := p^ * 2;
  Result := p^;
end;

procedure TForm1.TestPointerFunction;
var
  num, doubledNum: Integer;
begin
  num := 5;
  doubledNum := DoubleValue(@num);
  ShowMessage('元の値: ' + IntToStr(num)); // 10
  ShowMessage('二倍後の値: ' + IntToStr(doubledNum)); // 10
end;

タグ: Delphi Pascal ObjectOrientedProgramming

10月22日 12:40 投稿