TMyStringHelperの代案について


tomo  2016-09-21 00:39:00  No: 48329

TStringHelperを拡張してTMyStringHelperを定義することは不可能というのは有名?な話ですが、では実際にどうやって自作のユーティリティ関数を定義しているんでしょうか?

文法的な解説やこういう発想、アイデアもあるということではなく、
皆さんの実際の開発でどうやってString, Integer等に対する汎用的な便利関数を蓄積しているのか教えてください。

自分はそのへんがふらついていて適当な場所にコードをコピペしたりという感じになってしまっていて
いい加減スパッと統一したいのですがなかなかこれと言った方法がなく困っています。

よろしくお願いします。


通りすがり  2016-09-21 03:49:23  No: 48330

直接的な回答ではないのですが、逆に型を分けてしまう、というアプローチをとっています。
たとえば月(1-12)はもちろんIntegerでも表現可能ですが、これを部分範囲型として定義し、
これにrecord helperを用意します。

type
  TMonth = 1..12;
  TMonthHelper = record helper for TMonth
  public
    function GetName: String;
  end;

こんな感じです。もちろん万能ではないです。


nagamachi  2016-09-22 06:50:41  No: 48331

tomoさんこんにちは。
実際に使ってはいませんが、こんな感じならできます。

type
  MyString  = type string;

type
  TMyStrigHelper  = record helper for MyString
    function Double:  string;
  end;

function  TMyStrigHelper.Double:  string;
begin
  result  :=  self + self;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  wStr    : MyString;
  s       : string;
begin
  wStr    :=  'A000';
  ShowMessage(wStr.Double);
  s       :=  'A111';
  ShowMessage(MyString(s).Double);
end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加