- - PR -
変数の範囲
1|2|3|4
次のページへ»
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-03 23:41
.NETではVB6とは違い、宣言された範囲内でのみ有効ですよね?
で、以下様なコードが宣言範囲の重複でコンパイルエラーとなるのですが、なぜでしょうか? 宣言範囲は重複してないと思うんですけど。 -- 'Forブロック内で変数indexを宣言 For index as Integer = 0 to 10 '処理 Next 'Forブロックを抜けたので変数indexが使用できないので再宣言 Dim index as Integer | ||||||||||||||||
|
投稿日時: 2006-10-04 00:05
「範囲」は参照できる範囲であり
「宣言(For)」はDimと同階層にあるからです。 | ||||||||||||||||
|
投稿日時: 2006-10-04 00:58
これが、こうなるとどの index を使うか意味解らないですよね
これは出来ますよね。(たしか(汗))
_________________ かるあ のメモ と スニペット | ||||||||||||||||
|
投稿日時: 2006-10-04 02:22
基本は同一ブロック(プロシージャ)なので重なってはだめってことですね。 つまり宣言がある状態で宣言してはだめ、で、上記は宣言→消滅→宣言→消滅となるのでOKと。 まぁややこしいといえばややこしい。。。 ガイドラインからすると抽象的な名前は付けないってことですね。 | ||||||||||||||||
|
投稿日時: 2006-10-04 08:52
ブロック変数について調べてみればわかると思います。 | ||||||||||||||||
|
投稿日時: 2006-10-04 09:28
レベル低くなったなぁ。
Private Sub Hoge() Dim i1 As Integer For i2 As Integer = 0 To 10 Next End Sub ・i2はFor内でしか参照できないだろ? ・i1はFor内でも参照できるだろ? ・For内ではi1もi2も参照できるだろ? ・i1とi2が同じ変数名だったら曖昧さを解決できないだろ? っていう至極単純な話だと思うんだが。 とはいえクラスのプライベートとクラス外のパブリックは曖昧さが勝手に解決されるけどな・・・ これと混同してるんだろうかw内部的な都合は根本的に違うんだがww | ||||||||||||||||
|
投稿日時: 2006-10-04 09:51
いろいろ返信ありがとうございます。
わかりやすいところからレス。 #ぶさいくろうさんの書込 >Private Sub Hoge() > Dim i1 As Integer > > For i2 As Integer = 0 To 10 > > Next >End Sub > >・i2はFor内でしか参照できないだろ? >・i1はFor内でも参照できるだろ? >・For内ではi1もi2も参照できるだろ? >・i1とi2が同じ変数名だったら曖昧さを解決できないだろ? 上記コードだと、そのとおりだと思います。 今回の場合はi1がForブロックの後に宣言されているので、 i1はFor内で参照できません(よね?)ので同じ変数名でも曖昧さの解決が出来るはずではないでしょうか? #ダッチさんの書込み >ブロック変数について調べてみればわかると思います。 ブロック変数とは、For文の中で定義された変数はFor文の外では参照できないということですよね。それを踏まえた上で、ブロックを抜けての再定義なのですが・・・。 #まどかさんの書込み >「宣言(For)」はDimと同階層にあるからです。 >つまり宣言がある状態で宣言してはだめ、で、上記は宣言→消滅→宣言→消滅となるのでOKと。 OKな場合とOKでない場合の違いが良くわからないです。 私が最初に書いたコードでは、宣言→消滅→宣言となり、最後の消滅がないためNGなのでしょうか? | ||||||||||||||||
|
投稿日時: 2006-10-04 10:01
処理の順番ということを意識しているから混乱してしまうのだと思います。
変数の宣言に順番は関係なく、同一のスコープで同じ変数名が使われていることが問題なのです。 _________________ R・田中一郎 @ わんくま同盟 - R.Tanaka.Ichiro’s Blog 9月ページビュー掲載しますた [ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-10-04 10:16 ] |
1|2|3|4
次のページへ»