Mr.Tの場所

特攻野郎Aチームじゃないよー

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  206  : 記事  0  : コメント  838  : トラックバック  43

ニュース

  • 性別:男
  • 猫1:まる
  • 猫2:もろ
  • 猫3:にゃん左部郎
  • タバコ:男は黙ってJPS
[わんくま同盟] C#, VB.NET 掲示板
フィードメーター - Mr.Tの場所

書庫

日記カテゴリ

Mr.Tです、こんにちは。

巷で、祭りになってる(オイ Forループのときの型推論についてです。

VB.NETだけの話で、C#では、絶対におきないんです。なぜって、Varって書くから。

Option Compare Binary
Option Strict On
Option Explicit On
Option Infer On
Module InferSample

    Sub Main()

        For i = 1 To 10
            Console.WriteLine("Mr.Tはコング!")
        Next

    End Sub

End Module

これが型推論が行われているパターン。

 

Option Compare Binary
Option Strict On
Option Explicit Off
Option Infer Off
Module InferSample

    Sub Main()

        For i = 1 To 10
            Console.WriteLine("Mr.Tはコング!")
        Next

    End Sub

End Module

これが、型推論がおこなわれていないパターン。

変数iは、上がintegerになります。下は、objectになります。

Main内はおんなじです。

ソース見ただけじゃ、わかりません。

ええ、Explicit Onがページ内に指定されていればいいです。指定されていなければ、そのページ内だけじゃわかりません。

 

こんなの使えん!

 

そういうわけで、VB.NETでForループじゃ、型推論絶対つかうな派です。

#ごめんなさい、こんな程度しか、まだついていけません。

投稿日時 : 2007年12月27日 18:12

コメント

# re: VB.NETでForループで型推論をしたときのワナ 2007/12/27 18:15 とりこびと
>変数iは、上がintegerになります。下は、objectになります。

あれ?なりますか?

# re: VB.NETでForループで型推論をしたときのワナ 2007/12/27 18:17 とりこびと
Option Infer OnであればExplicitがOffでも推論が働いてInteger型になると思うのですが・・・?

# re: VB.NETでForループで型推論をしたときのワナ 2007/12/27 18:21 れい
コングって、飛行機が苦手な機械好きのアレですか?

# re: VB.NETでForループで型推論をしたときのワナ 2007/12/27 18:24 Mr.T
え、なりません?>とりこびっち
...あ、まちがえたーーーー!

# re: VB.NETでForループで型推論をしたときのワナ 2007/12/27 18:29 Mr.T
こっそり修正しておきました。
ありがとうございます>とりこびっち。

でも、C#ならまだしも、VB.NETじゃForループに
は使っちゃいかんと思ふのですがね。

特攻野郎Aチームのアレです、ハイ>れいさん

# re: VB.NETでForループで型推論をしたときのワナ 2007/12/27 18:42 とりこびと
Visual Basic な話がとてもうれしい件w

Varと明示しない変わりにOption という形で表現するわけですが、
コードの端的な見方(For Loop 付近)だけでは判断できないのが問題ってことですよね?

私はOptionの類はファイルの冒頭にほぼ必ず書くようにしていますし、
自分の中でのOptionの既定値を持っている(というか、IDEのプロジェクトの既定値を設定している)ので意識しませんでしたが、そういった見方もありますね。

# re: VB.NETでForループで型推論をしたときのワナ 2007/12/27 18:43 とりこびと
あ、あとOption Strict との組み合わせによってどうなるのかも知っておかなきゃw

・・・知らない間に遅延ばいんでぃんぐしてたりw

# re: VB.NETでForループで型推論をしたときのワナ 2007/12/27 18:44 よねけん
>ええ、Explicit Onがページ内に指定されていればいいです。

とりこびとさんのご指摘と同じですが、ExplicitではなくInferをOnではないでしょうか?


# Visual Basic 2008 の新機能 - ローカル型の推論の注意すべき点 その1(?その2はないかもw) - 2007/12/27 19:26 とりこらぼ。
Visual Basic 2008 の新機能 - ローカル型の推論の注意すべき点 その1(?その2はないかもw) -

# Visual Basic 2008 の新機能 - ローカル型の推論の注意すべき点 その1(?その2はないかもw) - 2007/12/27 19:27 とりこらぼ。
Visual Basic 2008 の新機能 - ローカル型の推論の注意すべき点 その1(?その2はないかもw) -

# re: VB.NETでForループで型推論をしたときのワナ 2007/12/27 19:29 とりこびと
というわけで、For のときじゃないが問題です。

# re: VB.NETでForループで型推論をしたときのワナ 2007/12/28 8:42 ぽぴ王子
> 特攻野郎Aチームのアレです、ハイ>れいさん

そしてなんでそれが頻出するかというと、コング役の俳優さんが「Mr.T」という名前だから、ですよね?
という無粋な解説だけはかんべんな、とか言われそうです orz

ええ、あくまで本筋にはつっこみませんよ。ええ。

# re: VB.NETでForループで型推論をしたときのワナ 2007/12/28 8:51 Mr.T
うは、とりさん食いつき良すぎ。
>コードの端的な見方(For Loop 付近)だけでは判断できないのが問題ってことですよね?

ですです。
C#だと、varと書くこと自体で型推論されることがわかるわけですが、
VBだと、その部分だけじゃわからない。

遅延バインディングが悪いかどうかの判断は
別に置いといても、型推論なのか、

>とりこびとさんのご指摘と同じですが、Explicitではなく
InferをOnではないでしょうか?

あう(^^;
Explicit Onなら、コンパイルエラーになるからって
ことを言いたかったんです。
それなら、わかるよなぁって。


# re: VB.NETでForループで型推論をしたときのワナ 2007/12/28 9:01 Mr.T
途中で切れちゃったので、修正

遅延バインディングが良い悪いは置いておくとしても、
ソースみただけで、変数の型がわからんのは
まずいよねぇと。

ソースのコピペで動くもんつくられる昨今だと、
option infer onまでコピーしてくれるかどうか
なんてのはわからないですし。

あたしゃ、自分みたいな初心者にどうなんって
立場になっちゃうんで、この機能はパスです。

>そしてなんでそれが頻出するかというと、コング役の俳優さんが「Mr.T」という名前だから、ですよね?
という無粋な解説だけはかんべんな、とか言われそうです orz

丁寧な解説ありがとうございます...って、私はコングじゃねー!
>ええ、あくまで本筋にはつっこみませんよ。ええ。
そして延々コングの魅力について語ってくれるんですね?


# re: VB.NETでForループで型推論をしたときのワナ 2007/12/28 9:20 とりこびと
>うは、とりさん食いつき良すぎ。

というわけで、もう少し食いついてみたり

今回の場合、
いままで書いていた
For i As Integer ...
が、
Dim i As Integer
For i = ...
と同じ動作をするために用意された構文なんですよね。

Visual Basic では Dim を見て型推論可能な位置かどうかではなく、どっちかって言うとAs と書かれている部分で判断することになりますね。

たとえばUsing ステートメントの先頭での宣言も型推論できる箇所という解釈です。
これはUsing disposable が
dim disposable
try

 disposable

...

という構文を簡潔に書くために用意されたものですから。

# re: VB.NETでForループで型推論をしたときのワナ 2007/12/28 10:13 Mr.T
>Visual Basic では Dim を見て型推論可能な位置かどうかではなく、どっちかって言うとAs と書かれている部分で判断することになりますね。

なるほど、そういやそうですね。Dimは型じゃないし。


# re: VB.NETでForループで型推論をしたときのワナ 2007/12/28 11:24 よねけん
> >とりこびとさんのご指摘と同じですが、Explicitではなく
> InferをOnではないでしょうか?
>
> あう(^^;
> Explicit Onなら、コンパイルエラーになるからって
> ことを言いたかったんです。
> それなら、わかるよなぁって。

そういう意図でしたか。失礼しました。

http://www.microsoft.com/japan/msdn/vs05/vbasic/vb9overview.aspx
この時点では、型推論の場合は以下のような記述をすることになっていたみたいですが、
For Dim i = 1 To 10

最終版ではこのDimは不要というか記述できないようになっているみたいですね。


# re: VB.NETでForループで型推論をしたときのワナ 2007/12/28 13:24 Mr.T
そうなんです、そうなんですよ!
それが記述できるなら、まだOKと思うんですが、そうじゃない。

でも、マウスをiにあてると、きちんとDim i...って出てくる
んですけどね。
こういうonMouseの際のバルーン内容を個別に表示非表示できる機能があれば、いいんじゃね?とか思ってみました。


Post Feedback

タイトル
名前
Url:
コメント