Javaで書いたコードを、VBで置き換えるだけの簡単な勉強をしていたら……変数で躓いた!!
public static void main(String[] args)
{
Integer[] array = { 1, 2, 3, 4 };
for(Integer item : array) {
System.out.println(item);
}
Integer item = 393;
System.out.println(item);
}
こんな感じに書き換えました。
Sub Main()
Dim array() As Integer = {1, 2, 3, 4}
For Each item As Integer In array
System.Console.WriteLine(item)
Next
Dim item As Integer = 393
System.Console.WriteLine(item)
End Sub
となってビルドすると、For Each側のitemに波線が出ていて、「変数'item'は、それを囲むブロック内の変数を非表示にします。」と、よく判らないエラーが発生しました。なんでやねん(´・ω・`)ショボーン
こういう時は、MSDNオンラインに頼るに限ります。
Visual Basic における有効期間
プロシージャとブロック スコープの間には密接な関係があります。プロシージャ内のどのブロックにも含まれていない場所で変数を宣言した場合、その変数は、プロシージャ全体から成るブロックのブロック スコープを持つと見なすことができます。
つまり、大きなスコープ(プロシージャスコープ)で定義した変数は大きなスコープ内で有効で、それに属している小さなスコープ(ブロックスコープ)は当然影響を受けるため、同じ変数名が割り当てられません。
こういうものなんだと理解はしましたが、ものすごく違和感を感じていて納得出来ませんでした。……なんでこんなに受け入れるのに抵抗があるんだろうと、トイレで悶々と考えてました。
void main(void)
{
int hoge = 5;
printf("%d\n", hoge); // 5が表示される
{
int hoge = 0;
printf("%d\n", hoge); // 0が表示される
}
printf("%d\n", hoge); // 5が表示される
}
スッキリしたのでトイレから出ました。駄目だなぁ……違和感が解決するまで次の項目を行けないなんて。あと自分の脳みそがC言語に最適化されてるのにビックリ。