当ブログは移転しました。

変数とは

はじめに

変数を人に説明するのは難しいことだと思う。

ここでは、変数に対する僕なりの解釈を述べたい。

 

数学における変数

数学では、式の中で変化することが可能なものを文字で表したものを呼ぶ。

例えば、

y = 2x

のxは変数である。 また、yも変数である。

 

例外としては、

x+5=8

のxは変数ではない。x=3と決まっているからである。

また、

(xの2乗) = 2

このxも変数ではない。 xは√2または-√2と決まっているからである。

中学・高校で数学を勉強した人はこのことを感覚的に理解していると思う。

 

ここからは、僕の現在の考え方を述べてみたい。

変数は、関数があってはじめて存在するように見える。数学では、関数のことを「ある要素が与えられるとある要素が返ってくる対応」と理解する。それら2つの要素はそれぞれ何かしらの集合に属している。その集合は、数学の世界から自分で切り取ってきたものである。数値の集合かもしれなければベクトルの集合かもしれない。つまり、変数になりうる「もの」が何なのかはその時々によって変わるのだ。だから変数と呼ぶ。「変もの」と呼んでもいいくらいだ。

ここで、あたかも自分で切り取ってきた集合が一つであるように述べたが、そうとは限らない。結果として帰ってくる要素をまとめて、それを集合としてしまえば確かに自分で用意するのは一つであるが、時に用意した二つの集合の間の関係を主張することもある。

まとめると、変数というのは関数を考える上で便宜上作られる概念なのである。

 

プログラミングにおける変数

プログラミングでは、データを扱う領域のことをいう。

または、その領域に名前をつけた際に領域の一般名詞として変数と呼ぶこともある。

変数そのものの概念は統一されているようだが、その使い方や仕様は扱うプログラミング言語によって異なる場合がある。

 

ここからは、僕の現在の考え方を述べてみたい。

プログラミングで重要なのは「データ構造」と「アルゴリズム(作業・How to)」である。ちなみにこの言葉は受け売りである。僕はそのデータとアルゴリズムの橋渡しをするのが変数だと理解している。データはプログラムの外部からまたは別のプログラムから渡される。これを一時的に保存し、作業するスペースが必要だ。しかし、PCの内部の領域は有限である。そこで、「この部分はこの処理につかうよ」と宣言することが変数を使うということだと思う。アルゴリズム側としては、この作業がどのデータに働きかけるのかを提示する必要がある。その際にデータを変数で指定してやれば、その中身ではなく種類を提示することができるのだ。

まとめると、変数というのはデータを”固有”にも”一般”にも扱う上で必要な概念なのである。

 

終わりに

実際には、数学の正しい理解は専門家にでも聞くしかないし(僕は専門家では決してない) プログラムは意図通りに動けばよいのである。

ただ、「こう思うんだけどどうだろう?」というスタンスは大事だと思う。