PR

 プログラミングで用いられる様々な概念そして用語…。なんとなくわかっているようで,実はあいまいな理解のまま使っていたりするものだ。そこで日経ソフトウエア探偵局では,直ちに優秀な探偵を派遣して真相の追求に当たります…じゃなくて,調査と実験によって謎を解き,「なんとなく」の部分を「すっきり&はっきり」させてみようと思う。

 第1回の調査対象は,どのようなプログラミング言語でも必ずお世話になる「変数」だ。なお,言語には主にC,C++,Visual Basic(VB)を用いる。

変数がプログラムの「柔軟さ」を支えている

 様々なデータを保持し,そのときの状況に応じて自在に姿を変える「変数」。どのようなプログラミング言語でも必ずお世話になる。プログラムの自由度は条件判断に基づく分岐や繰り返しといった制御構造によってもたらされていると思っている人は多いと思う。が,プログラムの挙動を臨機応変に切り替えている本当の原動力は,実は変数という「ただの値の入れ物」なのである。

 If命令による条件の判定で,常に100と1000のような決まり切った値同士を比べても意味がない。以下はVBの例だが,

If UserId = __ADMIN Then …

のように「変数と定数」または「変数と変数」を比較し,その結果によって続く動作を切り替えるから,プログラムとしての意味が認められるのだ(わかると思うけど,“UserId”が変数で“__ADMIN”が定数ね)。

If 1000 = 58 Then …

なんてやったって意味がないのは一目瞭然,至極当然,明朗快活,意気消沈(あ,後ろ二つは間違い)。

 Forループでカウンタ変数iが使えなければ,常に同じ回数処理を繰り返すだけになってしまう。それでは悲しい…というか,プログラムの意味がない。

 変数は,その時々で異なる値を保持しながら,しかもその値が確定していないソースコードの段階では名前によってそれを指定できる。プログラムにおいてはこの「変数」の存在こそが,とてもとても重要なのである。

 変数という言葉,ご存じの方も多いと思うが,もともとは数学用語である。特定の現象を説明するための数式には,その特定の現象に則した値(データ)を用いればいい。例えば,

毎時4kmで移動する物体が1時間30分後に何km進むか?

――という問題なら,

4 × 1.5 = 6.0

という数式で対応できる。が,このことを一般化/普遍化するためには

毎時x kmで移動する物体が,y時間後には何km進むか

――という問題に対応しなければならない。このときのxとyが「変数」だ。

 このように一般化すれば「毎時10kmで移動する物体の3時間後」や「毎時2.8kmで移動する物体の6800時間後」も,同じ数式で算出できるようになる。

 「毎時4kmで移動する物体が1時間30分後に何km進むか?」という命題だけでは,このような「想定可能な様々な状況」には対応できないのだ。重要なことは,数式の表現している普遍性は「変数によって保証されている」というところなのだ。

 うーん,なんか難しい言い回しだなぁ…。簡単に言ってしまうと,「変数のおかげで様々な事象・現象を端的に記述できる」ってこと。

 数学で用いられる変数は,要するに「概念」である。実体はどこにもない。数式を見て計算する人の頭の中に,x kmとy時間というデータの入れ物が沸々と(…かどうかはわからないが)わき上がり,そこに「xには10(km),yには6(時間)」などとその場に応じた値を入れて計算しちゃうのである。

 プログラミングでは,この変数が人間の脳ミソの中にわいて出た概念としての値の入れ物ではなく,メモリーの中に設定された「物理的な長さ(アドレス範囲)を持った領域」となる。