平々毎々(アーカイブ)

はてなダイアリーのアーカイブです。

LINQ

C#は強い型付けの言語なわけですが、LINQのような書き方が可能になるまでにはいろいろありまして。

  • C# 1.1
    • ジェネリックなし
    • メソッド参照あり(デリゲート、一級オブジェクトではないと思う)
      • (追記)デリゲートは変数にセットしたり、引数や戻り値に使ったりできる。だから一級オブジェクトといえるようだ。型がある(引数と戻り値の組が型になる)のに注意。
    • 匿名メソッドなし
    • クロージャなし
    • デリゲートはイベントとか非同期処理とかのハンドラって感じ
  • C# 2.0
  • C# 3.0

思うに

  • ラムダ式とかクロージャとかいうような記述ができるならLINQと同じような処理は実現できる
  • でも強い型付け言語のC#で気軽にクロージャを使えるようになるには、Javaに毛が生えた的なC#1.1ではだめで、Javaにはない機能をどんどん取り込まないといけなかった
  • ラムダ式とかクロージャとかが簡単に書けるような言語を前提にすれば、LINQのようなシンタックスシュガーを採用するかどうかは、言語の優劣には関係ないと思う
  • C#はいわゆるエンタープライズアプリケーションの世界で使われることを大きく意識しているはずなので、利用頻度とか、開発者たちの好みとか、そういったところを考えてLINQの採用を決めたのだろう
  • なんでもありな感じがMSっぽいと感じる