変数 (プログラミング)
プログラムの中でどのような名前の変数を用いるのかを、プログラミング言語の文法にのっとって明確に示すことを変数の宣言(せんげん、英: declaration)という。
ほとんどの静的型付けプログラミング言語では、変数を宣言する際にその名前だけでなくそのデータ型も指定する必要がある。 これにより、各変数が扱うことのできるデータの種類を制限でき、プログラムの型安全性が保証できる。一般に、データに対して行なえる処理はデータ型によって異なるので、データ型を厳密に検査することで、誤ったプログラムを書いてしまうことを防止するのに役立つ。
動的プログラミング言語では通例動的型付けが行なわれ、宣言なしに変数を使うことができる。
多くの静的型付けプログラミング言語では、プログラム側で型を明示しなくても、言語処理系(コンパイラ)が型システムに基づいて自動的に文脈から型を推論する機能があり、これを型推論 (type inference) と呼ぶ。型推論をサポートする言語では、変数宣言時の初期化式(右辺値)から型を推論し、型名の記述を省略することもできる。ただしバリアント型(英語版)や動的型付けとは異なり、型推論により決定された型は不変であり、再代入によって変数が表す値の型が変わるようなことはない。関数型プログラミング言語は標準的に型推論をサポートしているが、従来の手続き型プログラミング言語(オブジェクト指向言語を含む)にも型推論の機能が導入されていることが多い。
変数のスコープはアクセス可能範囲に関する用語であり、メモリ割り当て保証範囲に関する生存期間とは別の概念である。例えばC/C++は静的ローカル変数をサポートし、関数内のローカル変数に記憶域クラス指定子staticを付けることで、その変数は静的記憶域期間を持つようになり、「スコープを脱出すると参照はできなくなるが、プログラムが終了するまでメモリ上に残り続ける変数」を定義できる。
変数の生存期間とは、プログラムの実行時に、その名前とそれが指すオブジェクトという対応付けが、いつ始まり、(再代入などが無い限り)いつまで保持されるか、ということである。
C言語における関数の仮引数や、自動記憶域期間を持つローカル変数(static修飾されていないローカル変数)の生存期間は、その関数を呼び出してから抜けるまでである。これは、C言語では関数呼び出しから一旦抜けてしまうと、そこに戻ってくることは無い(setjmp.h(英語版)内のsetjmp/longjmpを使えば不可能ではないが、「深い方」へのジャンプは禁止されている)からである。
生存期間は変数とその中身(オブジェクト)の対応付け (binding) についての概念である。
通例、プログラムにおいて変数を扱うための主要な操作は、宣言・代入・参照の三つである。プログラミング言語によって変数の扱い方は多少異なるので、ここでは一般的な事柄を述べるにとどめる。実際のプログラミング言語の仕様(規格票)の表現とは、いずれも一致しないかもしれない(一般に、言語によって用語の意味も異なる)。