変数 (プログラミング)

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

テンプレート:出典の明記

プログラミングにおいて、変数(へんすう、variable)とは、プログラムソースコードにおいて、扱われるデータを一定期間記憶し必要なときに利用できるようにするために、データに固有の名前を与えたものである。 一人一人の人間が異なる名前によって区別されるように、一つ一つの変数も名前によって区別される。これにより、複数のデータを容易に識別することができる。変数を区別するための名前を特に識別子という。また一般に、変数が表しているデータをその変数の(あたい)という。

変数の宣言と代入と参照

プログラムにおいて変数を扱うための主要な操作は、宣言・代入・参照の三つである。 プログラミング言語によって変数の扱い方は多少異なるので、ここでは一般的な事柄を述べる。言語によって用語の意味も異なる。

宣言

プログラムの中でどのような名前の変数を用いるのかを、プログラミング言語の文法にのっとって明確に示すことを変数の宣言(せんげん)という。

いくつかのプログラミング言語では、変数を宣言する際にその名前だけでなくそのデータ型も指定する必要がある。 これにより、各変数が扱うことのできるデータの種類を制限できる。一般に、データに対して行える処理はデータ型によって異なるので、データ型を厳密に検査することで、誤ったプログラムを書いてしまうことを防止するのに役立つ。

また一部のプログラミング言語では、型推論といって、プログラムで変数の型を明示しなくても、処理系が自動的に型を判断する機能がある。多くの場合、型推論は変数の宣言と代入が一度にまとめて行われることが前提となる。

代入

宣言した変数に対して実際にデータを関連付けることを代入(だいにゅう)という。

プログラミング言語によっては、変数の宣言と代入を一度にまとめて行うことができる。 変数を宣言せずにいきなり代入できる言語もあるが、これは宣言されていない変数に対して処理系が自動的に宣言を補ってくれていると考えることが出来る。 ある変数に対して初めて行う代入は、特に初期化(しょきか)という。

多くの手続き型言語では、変数は複数回代入をすることができる。すでに代入を行った変数に改めて代入をすると、その変数とそれまでのデータとの関連はなくなり、新しいデータと改めて関連付けされる。 関数型言語では、一つの変数には一度しか代入できないものも多い。このような言語では、宣言と初期化を一緒に行うのが一般的であり、また、一つの変数が常に同じ値を持つ(値が変化しない)ことが保証される。(参照透過性

参照

その変数に代入したデータを利用することを、変数の参照(さんしょう)という。

一度も代入を行っていない、つまり初期化していない変数を参照することは意味を成さず、不正である。 しかし一部のプログラミング言語では、変数を宣言した段階で、自動的に何らかのデータが変数に関連付けられる。このような言語では、初期化を明示的にプログラムしないまま変数を参照できる。

スコープと寿命

変数のスコープとは、変数がソースコード内のどこで使えるかを示す概念である。一方、変数がプログラムの実行時においていつ使えるかを規定する概念が変数の寿命である。多くの場合、変数のスコープはその変数の寿命を規定する要因の一つとなる。

一般に、変数はその変数に対して定められたソースコードの特定の範囲内でしか使用することができない。すなわち、その変数が使用可能な範囲が、その変数のスコープである。例えば C では、関数の中で宣言した変数はその関数の中でのみ使用できる。これにより、関数内部の処理とは関係のないところから変数を使用されるのを防ぐことができる。また、(それぞれのスコープが独立しているため)異なる関数で宣言した変数に対して同じ名前を付けることもできる。

多くのプログラミング言語は、一つのスコープにおいて同じ名前の変数を複数宣言することを許していない。これはもちろん、それらを名前で区別することができなくなってしまうからである。しかしながら、ある変数のスコープが他の変数のスコープの中に含まれている場合には変数が同じ名前を持つことを許す言語もある。この場合、内側のスコープの中では外側のスコープを持つ変数を使用することができなくなる。

一方、変数の寿命とはプログラムが実行される際にその変数がいつからいつまで存在しているかということである。多くの場合、プログラムの処理がその変数のスコープ内に入ると(その変数の値を保存するためのメモリ領域が確保されるなどして)変数が存在し始め、処理がスコープから出ると変数の存在が消えるというように、変数のスコープに合わせて寿命が決められるが、スコープとは関係なくプログラムの実行が始まったときから終わるときまでずっと存在し続けるようなものもある(前者は自動変数、後者は静的変数などと呼ばれることが多い)。

関連項目