クロージャ

いつも楽しみにしている"http://martinfowler.com/bliki/Closure.html"の翻訳記事inぶりきじゃより

ああ、やっぱりJavaC#にもクロージャが欲しいなぁと思いつつ読んでいたらC#2.0ではクロージャが実現できるとの記事がJoe Walnes氏のBlog"The power of closures in C# 2.0"に。そんな馬鹿な、見落とした言語拡張があるのか?と期待して見たら..なるほど匿名デリゲート(anonymous delegates)をクロージャブロックとして使用するのですね。

やられた!! なるほど確かに匿名デリゲートを使えばローカルな変数にもアクセスできるね。

Ruby

def highPaid(emps)
  threshold = 150
  return emps.select {|e| e.salary > threshold}
end

C#2.0

public List HighPaid(List emps) {
  int threshold = 150;
  return emps.FindAll(delegate(Employee e) { 
    return e.Salary > threshold; 
  });
}

匿名デリゲートは便利だなぁと思いつつも今まではGUIイベントハンドラを非同期化する時にコードが分散するのを抑えるために使ったりJavaの匿名インナークラスのような用途に使ったりする程度でしたがこんな使い方があったとは...今後はこの方向で使うことも意識してみることにします。

いや〜〜久しぶりに目から鱗でした。やはり言語は一つに固執せずいろいろやってみるのがいいですね。