遅延Enumerableに関連して コメントで教えていただいた LINQ(Language Integrated Query)だが、 C#だとこんな感じらしい。
var 学籍番号前半名 = from p in 学生名簿 where p.学生番号 <= 15 orderby p.学生番号 select p.名;
ふむ、だけどこれならRubyで
学籍番号前半名 = 学生名簿. select{|p| p.学生番号 <= 15}. sort_by{|p| p.学生番号}. collect{|p| p.名}
で実現できるよね、
各節に当たるものが独立なので、同じパラメータを何度も指定する必要があることと、 効率良く実装するのがちょっと大変ということは除くとして。
ブロック万歳。
だが、「|p|」が何度も登場するのは確かにちょっとうっとうしいかも。 ruby-talkで話題になっていた「implicit block parameter」(具体的にはGroovyの「it」)が欲しくなるかも。
そうすると、こうなる
学籍番号前半名 = 学生名簿. select{it.学生番号 <= 15}. sort_by{it.学生番号}. collect{it.名}
あるいは、一連のブロックで共通に使うパラメータを用意すると言う手もあるかも。 今は文法、思いつかないけど。
いずれにしても、LINQいらないじゃん。
後はLINQっぽいものを効率良く実装する仕組みだな。
あ、でも、上記のページで紹介されている「C# 3.0の新機能」はどれも面白い。 「面白いけど、ほんとに(言語レベルで)必要?」というものが多いけど。
もうちょっと考えてみよう。
ディスカウントストアで「シガーソングライター」のようなものが、 安売りしていたので思わず購入。4980円。
外見も含めてほぼ同じ(OEM?)のようだが、再生順序が謎(シガーソングライターはファイル名順らしい)。 ドキュメントには登録順と書いてあるのだが、どうもそうでもないようだ。 FATファイルシステムのファイル取得順ってなにかあったっけ?
fatsortとかを導入してみればよいのか。
ユーザインタフェースについては気に入らない点が二つ。
前者はコスト的に記憶系を一切持っていないだろうから、しかたないとしても、 後者は手抜き過ぎかな。