With
Visual Basic Advent Calendar 2011の12日目です。Atndはこちら。http://atnd.org/events/23108
どうせVBについて書くんなら、VBならではのことを書こう。とはいえ、気になるものはすでにブログの記事なんかにしているから、改めて何を書こうかネタを探すと難しいんだよね。C#には無いものだと、やっぱりMyとかWithとかのキーワードかなぁ。Myは微妙に消えてしまいそうな気もするのでWithかなぁ。
ということで、Withの新しい使い方、初期化子について触れてみます。
今の仕事上、まだまだVB6のプログラムを見ることが多いんだけれど、オブジェクト名のタイプを減らしたいのか、やけに長いスコープでWithを使っているプログラムがあるんですよね。一体このWithはどこにかかっているのか問い詰めたい感じです。
そういったWithの使い方は死んでしまえと思うわけですが、こと初期化に限っていえば、変数の初期化はここからここまででやっていますよーってのがわかるので、そのWithがどのオブジェクトかわかるならWithは短いスコープでどんどん使っていけ!!という感じはしています。もちろんどんなに短くてもネストは嫌です。
そんな意味では、VB9からの初期化子を使ったWithの使い方はさすがだなーと思わせます。
以前Twitterでつぶやいたことがあるんだけれど、拡張メソッドを集めているサイト(http://www.extensionmethod.net/)に、VBだからこそ力を発揮する拡張メソッド、Selfってのが紹介されています。定義はこんな感じです。
<Runtime.CompilerServices.Extension()> _ Function Self(Of T)(ByVal x As T) As T Return x End Function
この拡張メソッドは、obj.Selfとするとobjを返却してくれるメソッドです。これだけだと微妙に何をしたいのかわからないのですが、VBのWithや初期化子を使うと、こんな感じでコードが書けます。
Module Module1 Sub Main() Dim target = New Hoge With { .ThisObject = .Self, .String1 = "abc", .String2 = "123" } Console.WriteLine("{0} = {1}", target.String1, target.ThisObject.String1) End Sub End Module
この初期化しを展開してしまえばそんな難しいことはやっていないし、どこで使うのと聞かれてもパットはでてこないけれど、ちょっと面白いでしょ。
-
2013年1月20日 11:40 午前VBのUsing構文で変数を指定しない « かるあのメモ on Wordpress