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;