2014年2月10日月曜日

Delphiでのrecordの便利な使い方 Part2

こんばんは
大阪本社 Mです。

前回に続きDelphiでのrecordの便利な使用方法を紹介
ジェネリクスのTListとrecordの組み合わせです。

早速いきましょう。

■サンプルコード■
-----------------------------------------------
type
   // record型定義
   TSyainRec = record
      社員番号: integer;
      氏名: string;
   end;

   ・
   ・
   ・
   ・

var
   // ジェネリクスのリスト
   SyainList:TList<TSyainRec>;

   SyainRec: TSyainRec;
   i: integer;
begin
   // ジェネリクスのリストを生成
   SyainList := TList<TSyainRec>.create;

   // 社員番号と社員名をリストに格納
   SyainRec.社員番号 := 1;
   SyainRec.氏名 := 'シンプル 太郎';
   SyainList.Add(SyainRec);

   SyainRec.社員番号 := 2;
   SyainRec.氏名 := 'シンプル 次郎';
   SyainList.Add(SyainRec);

   SyainRec.社員番号 := 3;
   SyainRec.氏名 := 'シンプル 三郎';
   SyainList.Add(SyainRec);

   // リストに追加したrecordのメンバー名でアクセス
   for i := 0 to (SyainList.Count -1) do
   begin
      Writeln('社員番号:' ,SyainList[i].社員番号);
      Writeln('氏名:' , SyainList[i].氏名);
   end;

   //リストを開放するだけでOK
   SyainList.free;
end;
-----------------------------------------------

■実行結果■
-----------------------------------------------
社員番号:1
氏名:シンプル 太郎
社員番号:2
氏名:シンプル 次郎
社員番号:3
氏名:シンプル 三郎
-----------------------------------------------



こういう使い方をするとなんだか実行結果が
-----------------------------------------------
社員番号:3
氏名:シンプル 三郎
社員番号:3
氏名:シンプル 三郎
社員番号:3
氏名:シンプル 三郎
-----------------------------------------------
となりそうですが、そんなことはありません。
recordは参照型ではなく値型だからです。

一番のミソは
ジェネリクスのTListに追加したrecordはひとつひとつ開放する必要がないということ。
動的配列を使っているから、コンパイラが勝手に開放してくれます。
Delphiに動的配列があってよかった。

ジェネリクスのTListとrecordは相性良しですね。



では。