変数 (プログラミング)
プログラミングにおける変数(へんすう、英: variable)とは、高水準言語のプログラムのソースコードにおいて、扱うデータを読み書きする記憶域 (storage) のことであり、固有の名前(識別子)によって識別される。変数を用いることで、データを一定期間記憶し必要なときに利用することができる。高水準言語において、変数は記憶装置(メモリ)を抽象化する役割を果たす。
一人一人の人間が異なる名前によって区別されるように、変数も個々の名前によって区別される。これにより、プログラム上で複数のデータを容易に識別・管理することができる。変数の識別子 (identifier) のことを変数名 (variable name) という。一般に、変数が表すデータをその変数の値(あたい、英: value)という。
変数のスコープ (scope) あるいは可視範囲とは、変数がソースコード上の「どこから可視であるか」を表す概念である。一方、変数の生存期間 (lifetime) とは、変数が持っているその内容との対応付け (binding) が、再代入などが無ければ「いつまで保持され続けるか」を表す概念である。
クロージャなどの変数キャプチャにより、その変数へのアクセスがその後もあるかもしれない場合は、その関数呼び出しを抜けてもその対応付け(束縛、bindingなどとも)は保持されなければならない。クロージャないしそのようなものがある言語では、そのためにローカル変数でもエクステントは(アクセスされる可能性がある限り)延長される。そのようなエクステントをinfiniteあるいはindefiniteのエクステント(訳して、無限の、あるいは、無制限の存在期間、など)という。
なお、C言語の関数におけるローカル変数をstatic修飾すると、グローバル変数と同様の生存期間(静的記憶域期間)になる。一方、C言語のグローバル変数をstatic修飾すると、変数のスコープをファイルスコープに制限する(内部リンケージにする)。これは単にstaticという同一のキーワードを、文脈から区別が可能だから流用しているというだけで、それぞれの意味は全く違う(後者はfilescopeといったような別の表現にするのが本来は適切だっただろう)。この流用が、おそらくスコープとエクステントを多くのプログラマが混同する原因の一つである。