BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース LINQ to Objectsプロジェクト:EduLINQ、 MoreLINQ、LINQBridge

LINQ to Objectsプロジェクト:EduLINQ、 MoreLINQ、LINQBridge

原文(投稿日:2011/03/10)へのリンク

EduLINQは、いかに LINQ to Objects オペレータが動くかを説明するための試みである。 MoreLINQ は、標準のオペレータを拡張した、LINQ to Objects オペレータのセットである。LINQBridge は、 LINQ to Objectsの.NET Framework 2.0へのポートである。

Jonathan Skeet氏は、2003年以来、 Microsoft C# MVPで、“C# in Depth”という本の著者であるが、最近 EduLINQプロジェクトという、LINQメソッドがいかに機能するかを説明する試みで、 LINQ to Objectsの再実装を終えた。 Apache License 2.0のもとにリリースされたこのプロジェクトには、ソースコードとユニットテストが付いていて、.NET Framework 3.5をターゲットにしている。氏による、学んだ教訓は以下である。

  • LINQ to Objectsは、拡張メソッド、デリゲート、IEnumerable<T> をベースにしている
  • オペレータは、適切であれば遅延実行を使い、可能であればデータを流す
  • オペレータは、元のソースを変えないで、適切なデータを返す新しいシーケンスを返す
  • クエリ式は、パターンのコンパイラ翻訳に基づいている。もうパターンを実装する必要はなく、関連するクエリ式だけである
  • イテレータ ブロックは、遅延実行を実装するのに非常に都合がいい
  • しかし、念入りの引数バリデーションが苦痛になる

氏は、MoreLINQと呼ばれるプロジェクトを作った。これは標準の LINQ to Objectオペレータを補完する 21ヶのオペレータ を持つライブラリである。

  • Batch – 「Batchは、ソース シーケンスをバケットの大きさにまとめる」
  • Consume –「完全に特定シーケンスを消費する。このメソッドは直ちに実行され、実行中のデータは保存しない」
  • EquiZip –「タプルの写像を返す。各タプルは、各引数のシーケンスからのN番目の要素を持っている」
  • MaxBy –「特定の写像を基に、特定シーケンスの最大要素を返す」
  • Scan – 「要素のシーケンスに対してスキャンを実行する(包括的なプレフィックスの合計)」
  • Zip –「タプルの写像を返す。各タプルは、各引数のシーケンスからのN番目の要素を持っている」

LINQBridge は、LINQ to Objectsを.NET Framework 2.0へポートしたもので、.NET Frameworkの以前のバージョンを使って、困っていた人たちにLINQの柔軟性とパワーを提供するものである。

この記事に星をつける

おすすめ度
スタイル

BT