第5講 プロシージャ(1)
第8話 変数のスコープ
前話の謎を解くためには、
変数のスコープの話をしなければなりません。
この話はなぜC言語がプログラム言語のキングオブキングになったかと関係します。
変数のスコープとは、変数の適用範囲であることを前に説明しました。
このことを説明するためにコードを次のように変更していただく必要があります。
Module Module1

  Sub Main() '私は社長だ。
    Dim a As Integer //変数aを宣言
    a = 3
    Console.WriteLine("a = {0:d}", a)
    f()
    Console.WriteLine("a = {0:d}", a)
  End Sub

  Sub f()
    a = 5
  End Sub

End Module

変更すると、

とaのところに赤い波線が付いてしまいますね。
そして、Ctrl+F5をすると、
002
とビルドエラーが発生します。
ビルドエラーが発生したときには、
いいえを選択して下さい。
選択すると、一番下に

とエラー原因が指摘されます。
Main()で
    Dim a As Integer //変数aを宣言
とちゃんと宣言してあるのに、
aが定義されていないと出てきてしまいます。
そして、

右の方にエラーした文の番号がでいます。
つまり、
    a = 5
に問題があるのだといっているわけです。
初心者の方は、箱の用途をちゃんと宣言して定義したはず!と納得できませんね。
実は、変数のスコープ(範囲)は関数内に限定されているのです。
つまり、aのスコープは

図の赤い
に限定されているのです。
エラーを解消するために、コードを次のように変更して下さい。
Module Module1

  Sub Main() '私は社長だ。
    Dim a As Integer '変数aの宣言
    a = 3
    Console.WriteLine("a = {0:d}", a)
    f()
    Console.WriteLine("a = {0:d}", a)
  End Sub

  Sub f()
    Dim a As Integer '変数aの宣言
    a = 5
  End Sub

End Module

今度は赤い波線も消えてビルドエラーも発生しませんが、
実行結果は、
a = 3
a = 3

です。
どうして、
    a = 5
が生きないのでしょうか。
理由はおわかりですよね。
そうです。スコープです。

スコープすなわち変数の適用範囲は基本的にプロシージャ内に限定されている!です。
同じ名称のaでも実は、別の箱です。
箱は社員専用の箱でして、
他の社員は使うことが原則として出来ないのです。
社長が用意した箱や社員が用意した箱は、
その用意した人専用の箱なのです。
前話で引数を使い値を渡しましたが、
実は箱そのものを渡したのではなく、
あくまで箱の中身の値を渡したのにすぎないのです。
基本的には箱は用意した社員専用ですし、
箱は渡せないのです。
絶対的な権限を持つ社長であるMain()でさえ、
社員の箱を勝手に使うことは出来ないのです。
スコープを関数内に限定した−−−これがC言語がキングオブキングになった最大の理由です。
そして、VBはこの素晴らし利点を学んだのです。
(しかも、基本的には他の社員が用意した箱は使えないはずなのに、
許可を与えて使用をさせる方法も考えたことが、
C言語がながらく愛されてきた理由なのです。
箱は渡せないのに、箱を使用することを可能にする魔法の方法を
C言語は備えているのです。
VBも基本的に同じです。
VBを小馬鹿にする人がいますが、
現在のBasicは決してC言語に劣らないのです。)
どうして、スコープを関数内に限定した、
つまり、箱を社員専用のものにしたことが、
C言語の成功の素になったのはどうしてでしょうか。
そして、なぜVBは真似たのでしょうか。



第7話へ   第9話へ
 
002

初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ