- - PR -
変数の範囲
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-10-04 10:08
これも追加しとくか。 ・i1はHogeプロシージャ全体で参照できるだろ? これで納得できん? で。参照できる範囲については最初にまどか氏から答えが出てるよ。 全員の意見を合わせて理解してくれるのとばかり思っていた。端折って悪かった。 | ||||
|
投稿日時: 2006-10-04 10:13
後とか前とかは関係ないですよ。 同じスコープにいるのが問題なわけで。 もし出来たとしても、そんなわかりにくいソースは見たくないですけどね。 | ||||
|
投稿日時: 2006-10-04 10:15
VBだとメッセージが判り辛いのですが、C#だとこんなメッセージが表示されます。
-- ローカルの変数 'index' をこのスコープで宣言することはできません。これは、'子' スコープで別の意味を持つ 'index' の意味が変更されるのを避けるためです。 -- と表示されます。 結局、紛らわしいので宣言位置に関わらず単純に同一スコープで同じ変数名の使用を許さないと「決めた」ということではないでしょうか? | ||||
|
投稿日時: 2006-10-04 10:24
スコープが何かと言うところでつまずいているように思います。
VB6のコードです。 上位バージョンで動かなかったらごめんよ。 多分動くはず。 紛らわしいiの意味も考えてみてくださいね | ||||
|
投稿日時: 2006-10-04 10:30
Dimはそのプロシージャ全体で見えます。
For文はプロシージャに書かれていますのでその中でDimのiを見れるわけです。 で、Forにiを宣言することによりDimのiより内側に同じ名前が登場したため Forの内側ではForで宣言したiしか見れなくなるよというのがメッセージの「非表示」の意味です。 | ||||
|
投稿日時: 2006-10-04 10:48
まどかさんの言う「見える」や「参照できる」とは、その変数に対して値の参照や代入が出来るというのと違う意味ですか? Dim宣言の前にその変数に対し値を設定しようとすると、同じプロシージャ内でも ローカル変数'hoge'は宣言されているため、参照できません。 というコンパイルエラーが出ます。そのため、参照できる範囲というのを宣言されてからプロシージャが終わるまでと解釈していたのですが、そこがそもそも間違っています? | ||||
|
投稿日時: 2006-10-04 10:54
いやそもそもこれをエラーにするようになった理由は、
コンパイラにはあいまいでなくても、人間に分かりにくいものは エラーにするという方針によるものでしょう。 C#とかはそういう方向に行ってますよね? C++とかは、ローカル変数でも内部が優先というルールですから、 同じルールで行けばコンパイラは別に困りませんが、 人間にとっては勘違い、読み違い、バグの元になりやすい。 なのであえてエラーになるようにしている。 したがって、宣言位置より上だからあいまいではないとか、 そもそもそういう問題ではないわけです。 | ||||
|
投稿日時: 2006-10-04 11:06
だーやんさんはJavaとかほかの言語に慣れている人なのではありませんか ?
Javaではふつーにこういうコード書きますよね。
|