とりこらぼ。

Learn from yesterday,
live for today,
hope for tomorrow.

目次

Blog 利用状況

ニュース

プロフィール

  • 名前:とりこびと
    とるに足らない人間です。

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

Visual Basic 9.0 って、どんなんかーなぁー♪ その1。- Implicitly Typed Local Variables -

例によって(?)タイトルコールは仁鶴師匠でお願いします(ぉ。

先だってR・田中一郎さんがC♯3.0についてのエントリをたくさんなさっていますが、私ってば、やっぱ Visual Basic 9.0 かな?というわけで、Visual Basic の次期バージョン Visual Basic 9.0 の個人的なまとめのその1です。

おおよそ以下の情報を元に書いてます。英語です。私は英語が苦手ですので、ちゃんとしたことはネタ元から、ボケはこのエントリからでお願いしますね。

Overview of Visual Basic 9.0(http://msdn2.microsoft.com/en-us/library/ms364068(vs.80).aspx)

今回は Implicitly Typed Local Variables (・・・暗黙の型なローカル変数?)について。

Dim i = 0

Dim s = "黙れ小僧!"

どうやらこういうこと(?)らしいです。パッと見、とても不安になる見た目ですね。Visual Basic 8.0 の感覚でいくと、Option Strict On だと、コンパイルエラーです。ですが、実際にはそれほど不安なわけでもなく、コンパイラがちゃんと右側から型を推測してくれるらしいです。つまり、上記のコードで、ローカル変数 i は Integer型、ローカル変数 s はString型と推測されるということですね。

でもって、もちろん・・・

Public Class WankumaMember

    Private _id As Integer
    Public Property ID() As Integer         Get             Return _id         End Get         Set(ByVal value As Integer)             _id = value         End Set     End Property

    Private _name As String
    Public Property Name() As String         Get             Return _name         End Get         Set(ByVal value As String)             _name = value         End Set     End Property

End Class

こんなクラスがあったとしても、

Dim member = New WankumaMember

ローカル変数 member は WankumaMember 型と推測されます。

で、かるあさんのエントリによると、この機能はオプションによって制御できるとのこと。その新しく追加されたオプションは Option Infer だそうです。これ、デフォルトが On になるようですので、

' Visual Basic 9.0
Option Strict On

Public Class Program
    Public Sub Hoge()
        Dim i = 0         Dim s = "黙れ小僧!"
        Dim member = New WankumaMember
    End Sub
End Class

これ↑はOK。

' Visual Basic 9.0
Option Strict On
Option Infer Off

Public Class Program
    Public Sub Hoge()
        Dim i = 0         Dim s = "黙れ小僧!"
        Dim member = New WankumaMember
    End Sub
End Class

これ↑はダメになります。

また、この機能はコンパイラによってなされるものですので、Infer Onの状態での遅延バインディングは、明示的に行わなければならなくなります。というか、明示的に行ってください、お願いします(誰に?w)。

Dim member As Object = New WankumaMember

さらにさらに、このImplicitly Typed Local Variablesってば、For...Next や For Each...Next ステートメントなどのループ コントロール変数にもいけると。

Dim wankumaMembers = New List(Of WankumaMember)

For Each member In wankumaMembers
    System.Console.WriteLine(member.Name)
Next

なるほどね~。現行バージョンでも Option Strict Off でコードとして同じ状態は書けますが、そのとき変数 member は Object型になっていました。これがちゃんとWankumaMember型として機能するわけですね。



ん~、個人的には別にOK~って感じです。でもちゃんとやらないと Option の組み合わせがごちゃごちゃしちゃいそうな予感です。できれば Option の類はコード上に載っけてほしいですね。

投稿日時 : 2007年7月19日 11:46

Feedback

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その1。- Implicitly Typed Local Variables - 2007/07/19 12:01 片桐

ふむ、なるなるw

VB4で当たり前のように使っていた、variant型みたいなモンに思えるデスよ。
どうして使えなくなったのよ(T-T)
なんて思ってたんだけど、姿を変えて復活?<違っ

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その1。- Implicitly Typed Local Variables - 2007/07/19 12:01 片桐

ふむ、なるなるw

VB4で当たり前のように使っていた、variant型みたいなモンに思えるデスよ。
どうして使えなくなったのよ(T-T)
なんて思ってたんだけど、姿を変えて復活?<違っ

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その1。- Implicitly Typed Local Variables - 2007/07/19 12:24 シャノン

> これ↑はダメになります。

美輪さんに怒られると。

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その1。- Implicitly Typed Local Variables - 2007/07/19 12:53 ながせ

variantなくなってたのか..

私の脳内は8年間とまっていたらしい^-^;

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その1。- Implicitly Typed Local Variables - 2007/07/19 13:17 通り*

VBの場合、今も
Dim member As New WankumaMember
って書けるから
Dim member = New WankumaMember
の恩恵はそんなに無かったり?
でもループの所は見やすくなるね。

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その1。- Implicitly Typed Local Variables - 2007/07/19 13:19 とりこびと

コメントありがとうございます。

>>片桐さん

>variant型みたいなモン

ちょっと違うと思います。
型を明示的に書かなくてもコンパイラが推測してくれるというだけです。
なので、
Dim member = New WankumaMember
での Member は、WankumaMember型です。
今まで、
Dim member As WankumaMember = New WankumaMember
のようにAsで、型を明示して宣言していた部分をコンパイラが自分で考えて型を設定してくれているので、型の厳密性は変わらないのですね。(多分。

'variant型みたいなモン'は.NET では Object 型な感じですかね。
といっても、すべてのクラスの基底にあるという感じですので、
ちょっとまた根幹的な意味合いは違うと思うのですが、みたいなモンってことで(^^;

>>シャノンさん

>美輪さんに怒られると。

黙れ小僧!(嘘ですゴメンナサイ。)

>>ながせさん

>variantなくなってたのか..

私はそもそもVisual Basic6.0以前を使ったことがほぼないので、variant型ってのを使ったことが無いのですw

>私の脳内は8年間とまっていたらしい^-^;

8年前・・・私は・・・Visual Basic っていう名前すら知らなかったです・・・。

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その1。- Implicitly Typed Local Variables - 2007/07/19 13:22 とりこびと

通り*さん、コメントありがとうございます。

>Dim member = New WankumaMember
>の恩恵はそんなに無かったり?

ですねぇ・・・。
Dim member As WankumaMember
member = New WankumaMember

Dim member As New WankumaMember

Dim member As WankumaMember = New WankumaMember

Dim member = New WankumaMember
え~っと・・・w

他の新機能で効いてくる感じだと聞いていますw

>でもループの所は見やすくなるね。

これはうれしいですね♪

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その1。- Implicitly Typed Local Variables - 2007/07/19 14:11 とっちゃん

VARIANT 型(大文字で書いてあることに意味があるw)は、COM(オートメーション)では今もなお生きていますよ。

まぁ、数少ないVBから持ち込まれたものと言えるでしょうw<主語がねーぞ主語が!

#この辺の話は明後日の夜にでもw<おい!

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その1。- Implicitly Typed Local Variables - 2007/07/19 16:27 中博俊

BSTR

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その1。- Implicitly Typed Local Variables - 2007/07/19 18:00 とっちゃん

つ【VARIANT_BOOL】

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その1。- Implicitly Typed Local Variables - 2007/07/20 0:25 けろ

>そのとき変数 member は Object型になっていました。

なるほど。memberの型はObject型だけど、
取り出した時は、WankumaMember型ってことですか。
ちなみに、

Option Strict On
Option Infer On

にした場合や、

Option Infer On
Option Strict On

にした場合は、どうなるんでしょうか?
(せっかくなんで、取り上げて欲しいなと思ったりしてw)

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その1。- Implicitly Typed Local Variables - 2007/07/20 10:22 とりこびと

コメントありがとうございます。

>>とっちゃんさん & 中さん

えっと・・・宇宙語ですか?www

>>けろさん

>memberの型はObject型だけど、
>取り出した時は、WankumaMember型ってことですか。

んと・・・memberの型はWankumaMember型です。

なんか・・・うまく云いようがないんですけど(^^;

# Visual Basic 9.0 って、どんなんかーなぁー♪ その2。- Object and Array Initializers - 2007/07/20 13:58 とりこびと ぶろぐ。

Visual Basic 9.0 って、どんなんかーなぁー♪ その2。- Object and Array Initializers -

# re: Visual Basic 9.0 って、どんなんかーなぁー♪ その1。- Implicitly Typed Local Variables - 2007/07/20 16:20 けろ

>んと・・・memberの型はWankumaMember型です。

「そのとき変数 member は Object型になっていました」とおっしゃっていたので・・・
よく見ると、「現行バージョンでの話」というところを読み飛ばしておりましたwww
失礼しました。
今後は、memberの型はWankumaMember型として、認識されますよ!ってことですね。
理解しました。

# kOblnqPPanBLPNt 2012/01/04 7:22 http://www.kosherbeefjerky.net/

ok4vzq Post brought me to think, went to mull over!!...

タイトル
名前
Url
コメント