だめだ!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 | 2006年04月12日 11:00
日時: 2006年04月12日 11:00
繰り返し書くような処理は、ブロックが得意だと思います。
あとは、マクロみたいなのを使わずに、マクロっぽいことをやるのが、好きなんですよね・・・。
投稿者: TOBY | 2006年04月12日 20:02
日時: 2006年04月12日 20:02