« C#のyieldを甘く見てました | トップページ | VB2008ではインターフェースにメソッドを実装できます »

2008年5月26日 (月)

LINQ独自拡張時の遅延実行

C#のyield returnに相当するキーワードがVBにないという話ですが、前回も書いたように私はこのことはそれほど気にならないのです。
確かにyield returnは便利な機能ですが、これがないとできないという要件レベルの機能は多分ないと思うからです。とは言え、VBに導入されれば喜んで使うつもりです。

でもLINQのことを考えるとなんだか煮え切らない気持ちになります。

というのもLINQのいろいろな機能はC#のyield returnで実装されているからです。
これが具体的に影響するのは次の2点です。
1.VBで独自にLINQのキーワードを定義しても遅延実行できない。
2.VBで独自にLINQのキーワードを定義した場合List(Of T)などIEnumerable(Of T)を実装するクラスを媒介して値を戻す必要がある。

(具体例は少し下のリンク先にあります。)

このことが気になっていたので、先日マイクロソフトのセミナーに参加した時にたまたまお話しすることができたMVPのけろ-みおさんと、マイクロソフトの小高さんに聞いてみました。

結果、けろ-みおさんの方で要点まで整理していただきました。
http://techbank.jp/Community/blogs/mymio/archive/2008/05/25/788.aspx
この中でけろ-みおさんは拡張メソッドの中でさらにLINQを使うという面白い試行も紹介しています。
しかも、そのLINQはスパイスが効いています。VBのLen関数をうまくLINQで表現されています。

ちなみにLINQのキーワードを独自定義するにはIEnumerable(Of T)に対する拡張メソッドを作成します。

話は変わりますがマイクロソフトは無料で質のいいセミナーをしばしば開催しています。みなさんもマイクロソフトのサイトをチェックしてみてください。
http://www.microsoft.com/japan/msdn/events/offline/

今回私が参加したのはこの中の「さあ、できることから」というやつです。参加と言っても前でしゃべる人ではなく一般人として参加してきました。
技術的には基本的なことがらが多かったですが、実際の画面操作を見ながらいろいろな話をきけてとても参考になりました。ほぼ同じ内容を6月以降地方でも実施するようですからお近くにお住まいの方は足を運んでみてはどうでしょうか?

|

« C#のyieldを甘く見てました | トップページ | VB2008ではインターフェースにメソッドを実装できます »

Visual Basic」カテゴリの記事

コメント

おお、私の記事をご紹介頂き、ありがとうございますww
るきおさんが、Blogやっていらっしゃったとは知りませんでした。
今後、RSSで購読させて頂きますね。

>#のyield returnに相当するキーワードがVBにないという話ですが、前回も書いたように私はこのことはそれほど気にならないのです

これは、同感ですね。しかしおっしゃっている通り、LINQのこと考えると、煮え切らないですね。
LINQのためにVBも言語拡張したので、あわせて、yield return、yield break 相当のものも合わせて
拡張しても良かったのかなと思います。
今後、考えていくとは思うんですけどねw

投稿: けろ-みお | 2008年5月27日 (火) 23時36分

けろ-みおさん、こんにちは。
私のブログはかなり気まま更新です。ゆるくお付き合いください。
>LINQのためにVBも言語拡張したので、あわせて、yield return、yield break 相当のものも合わせて
>拡張しても良かったのかなと思います。
そうですね。VB10ではどんなことが計画されているのか今から楽しみです。
VB9のときは大分前から情報がでていたのにVB10の情報は現在全くないようで、やきもきしています。

投稿: るきお | 2008年5月29日 (木) 22時24分

こんな記事が挙がっていますね。

2010 年 6 月 18 日
[C# の反復子ブロック (yield return) の代替を Visual Basic で実現 ~クエリ式とラムダ式の応用~]
http://msdn.microsoft.com/ja-jp/ff755915.aspx

投稿: 魔界の仮面弁士 | 2010年7月 9日 (金) 14時41分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/197542/41328391

この記事へのトラックバック一覧です: LINQ独自拡張時の遅延実行:

« C#のyieldを甘く見てました | トップページ | VB2008ではインターフェースにメソッドを実装できます »