Delphiでラムダ式

Delphi 10.3 Rioでは、Delphi言語のエンハンスとして、インライン変数宣言インライン変数の型推論が導入されました。

これによりDelphiラムダ式(無名メソッド)が書きやすくなりましたのでご紹介します。

ソースコードラムダ式を使うメリットとしては以下が挙げられます。

  • スレッドやコールバックのようなロジックをインラインで書くことによって可読性が向上する。
  • 判定条件などの処理をオブジェクトとして持つことで記載が簡潔になる。

10.2まで、Delphiで無名メソッドを使用するにはTypeブロック内で以下のように宣言する必要があります。

program LTDel;
{$APPTYPE CONSOLE}
{$R *.res}
uses
  System.SysUtils;
type
  TMyFunc = reference to procedure();
var
  f0 : TMyFunc;
  f1 : TMyFunc;
begin
  f0 :=
    procedure begin
      WriteLn('Hello,')
    end;
  f1 :=
    procedure begin
      WriteLn('World!')
    end;
  f0();
  f1();
end.

そして、10.3 Rioからは、以下のように記述出来ます。ラムダ式を配列として宣言した例です。型推論のおかげでかなりラムダ式しています。

program LTDel;
{$APPTYPE CONSOLE}
{$R *.res}
uses
  System.SysUtils;

begin
  var f := [
    procedure begin
      WriteLn('Hello,')
    end,
    procedure begin
      WriteLn('World!')
    end
  ];

  f[0]();
  f[1]();
end.

一見、ラムダ式は難しく見えますが、理解して使い始めた途端に可読性が良くなりますので、是非とも使ってみて下さい。