« Rubyの不満点 | メイン | Delphiイライラ(無名関数くれ) »

[Delphi] ああ、Delphiイライラ(ブロックくれ)

だめだ!Delphiにもブロック構文ほしすぎる。
無名関数でもいいからくれ。
高階関数すらマンドクサくなってるよ、もー。

ブロックがあれば、圧倒的に簡潔に書ける部分がちらほらでてくると、
イライラしてきます。Ruby病。

例えば定型のループ処理(イテレート処理)なんかは、
ブロックあれば、超楽になる。

for i := 0 to FItems.Count - 1 do begin
  Part := Items[i];
  if Part.IsExistence then
    Part.Move;
end;
 
for i := 0 to FItems.Count - 1 do begin
  Part := Items[i];
  if Part.IsExistence then
    Part.Draw;
end;

なんての単調なのも、(ブロックがあるとすると)

procedure THogeItems.Each;
begin
  for i := 0 to FItems.Count - 1 do begin
    Part := Items[i];
    if Part.IsExistence then
      Yield(Part);
  end;
end;
 
Items.Each do begin |Part| Part.Move; end
Items.Each do begin |Part| Part.Draw; end

でよい。(これでもまだ単調だけど)

最近のDelphiの新機能、for-in-doでもできるけど、
イテレータ(Enumerator)の用意が面倒すぎる。

あとは、try-finally-end を多用するところも、
ブロックで省略できる。

Hoge.BeginXyzzy;
try
  Hoge.Mage;
  Hoge.MogeMage;
    :
finally
  Hoge.FinishXyzzy;
end

と何度も書くのを、

procedure THoge.Xyzzy();
begin
  BeginHoge;
  try
    Yield;
  finally
    FinishHoge;
  end;
end;

Hoge.Xyzzy do begin
  Hoge.Mage;
  Hoge.MogeMage;
  :
end;

でOK。行数増えたけど、何度も書くときは、後者の方が楽。
というか、Finallyすることを強制できる。

しばらくは、高階関数と for-in-do で我慢するしかないかなー。

以上、俺Delphi妄想案でした。

カテゴリ: [ Delphi ]

コメント (2)

Ko-Ta:

二つ目のサンプルはいいですね。ブロック単位にソースの再利用できると随分とすっきり出来そうですねー。ちょっとマクロっぽいけど

TOBY:

繰り返し書くような処理は、ブロックが得意だと思います。

あとは、マクロみたいなのを使わずに、マクロっぽいことをやるのが、好きなんですよね・・・。

コメントを投稿

Twitter(今何してる?)

プロフィール

あわせて読みたい

あわせて読みたいブログパーツ

人気エントリー

About

2006年04月12日 10:02に投稿されたエントリーのページです。

ひとつ前の投稿は「[Ruby] Rubyの不満点」です。

次の投稿は「[Delphi] Delphiイライラ(無名関数くれ)」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。