いつもお世話になっております。
最近、便利すぎるヘルパーにハマっています(笑)
何を今更…と言われるかも知れませんが、
案外この便利さを知らない方もいるかと思いまして投稿しました。
【Unit2】HogeIntヘルパーユニット
unit Unit2;
interface
uses
System.SysUtils;
type
// 別なInteger型を作る
HogeInt = type Integer;
// 別なInteger型のメソッドを宣言する
HogeIntHelper = record Helper for HogeInt
public
// クリア
procedure Clear; overload; inline;
// インクリメント
function Inc : HogeInt; overload; inline;
end;
implementation
// HogeIntクリア
procedure HogeIntHelper.Clear;
begin
// Selfは自分自身の実体です。
Self := 0;
end;
// インクリメント
function HogeIntHelper.Inc : HogeInt;
begin
// functionのResultに渡してあげる事で、メソッドを連続して
// 記述できる様になります。
// 例:HogeInt.Inc.Inc.Inc等
Result := Self + 1;
end;
end.
【Unit1】メインユニット ヘルパーを利用する側
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.StdCtrls, FMX.Controls.Presentation,
Unit2; // ← HogeIntが定義されているユニット
type
TForm1 = class( TForm )
Label1 : TLabel;
ClearButton : TButton;
IncButton : TButton;
procedure FormCreate ( Sender : TObject );
procedure ClearButtonClick( Sender : TObject );
procedure IncButtonClick ( Sender : TObject );
private
{ private 宣言 }
Count : HogeInt;
public
{ public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.FormCreate( Sender : TObject );
begin
Count.Clear;
Label1.Text := Integer( Count ).ToString;
end;
procedure TForm1.ClearButtonClick( Sender : TObject );
begin
Count.Clear;
Label1.Text := Integer( Count ).ToString;
end;
procedure TForm1.IncButtonClick( Sender : TObject );
begin
Count := Count.Inc;
Label1.Text := Integer( Count ).ToString;
end;
end.
※ HogeIntを作りClearとIntメソッドを追加。
従来のIntegerが持つToString等はキャンセルされてしまうので、
HogeIntでToStringを使いたい場合は、Integer型でキャストする事で使用可能。
例:Integer( HogeInt.Inc ).ToString;
今では日付&時刻計算やトークン切り出しのヘルパー等を作ってます。
Label1.Text := HogeDateTime.AddMinute( 3 ).ToSecond.ToString;
Label1.Text := HogeTokun.Tokun( 5 ).ToLength;
などと書く事ができ、利用するコード側で読みやすくなり、大変重宝しています。
|