- PR -

変数の範囲

投稿者投稿内容
だーやん
会議室デビュー日: 2004/03/07
投稿数: 16
投稿日時: 2006-10-03 23:41
.NETではVB6とは違い、宣言された範囲内でのみ有効ですよね?
で、以下様なコードが宣言範囲の重複でコンパイルエラーとなるのですが、なぜでしょうか?
宣言範囲は重複してないと思うんですけど。

--
'Forブロック内で変数indexを宣言
For index as Integer = 0 to 10
'処理
Next
'Forブロックを抜けたので変数indexが使用できないので再宣言
Dim index as Integer
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-10-04 00:05
「範囲」は参照できる範囲であり
「宣言(For)」はDimと同階層にあるからです。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-10-04 00:58
引用:

だーやんさんの書き込み (2006-10-03 23:41) より:

コード:
'Forブロック内で変数indexを宣言
For index as Integer = 0 to 10 
 '処理
Next
'Forブロックを抜けたので変数indexが使用できないので再宣言
Dim index as Integer





これが、こうなるとどの index を使うか意味解らないですよね
コード:
Dim index as Integer
For index as Integer = 0 to 10 
 '処理
Next



これは出来ますよね。(たしか(汗))
コード:
For index as Integer = 0 to 10 
 '処理
Next
For index as Integer = 0 to 20 
 '処理
Next


_________________
かるあ のメモスニペット
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-10-04 02:22
引用:

これは出来ますよね。(たしか(汗))
コード:
For index as Integer = 0 to 10 
 '処理
Next
For index as Integer = 0 to 20 
 '処理
Next




基本は同一ブロック(プロシージャ)なので重なってはだめってことですね。
つまり宣言がある状態で宣言してはだめ、で、上記は宣言→消滅→宣言→消滅となるのでOKと。
まぁややこしいといえばややこしい。。。
ガイドラインからすると抽象的な名前は付けないってことですね。
ダッチ
大ベテラン
会議室デビュー日: 2005/10/31
投稿数: 113
投稿日時: 2006-10-04 08:52
引用:

だーやんさんの書き込み (2006-10-03 23:41) より:
.NETではVB6とは違い、宣言された範囲内でのみ有効ですよね?
で、以下様なコードが宣言範囲の重複でコンパイルエラーとなるのですが、なぜでしょうか?
宣言範囲は重複してないと思うんですけど。


ブロック変数について調べてみればわかると思います。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 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
だーやん
会議室デビュー日: 2004/03/07
投稿数: 16
投稿日時: 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なのでしょうか?
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-10-04 10:01
処理の順番ということを意識しているから混乱してしまうのだと思います。
変数の宣言に順番は関係なく、同一のスコープで同じ変数名が使われていることが問題なのです。

_________________
R・田中一郎 @ わんくま同盟  -  R.Tanaka.Ichiro’s Blog
9月ページビュー掲載しますた

[ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-10-04 10:16 ]

スキルアップ/キャリアアップ(JOB@IT)