定数 (プログラミング)
プログラミングにおいて定数(「ていすう」または「じょうすう」、英: constant)とは、変数同様プログラムのソースコードにおいて、扱われるデータを一定期間記憶し必要なときに利用できるようにするために、データに固有の名前を与えたものである。 ただし変数とは異なり、一度初期化するとその内容(値)を変更することはできない。よって、内容が変化しないことが保証される名前が必要なときに使用される。
ソースコードに直接記述するデータ(リテラル)のことを指して定数と呼ぶことがあり、標準規格での用語がそうなっている言語もある。しかし、この記事で扱う「定数」はデータに名前を与えるものであり、基本的にリテラルとは別である。リテラルについてはそちらの記事を参照。なお、言語によっては、定数を初期化する式にリテラルあるいはリテラルと演算子等のみから成る式しか許さないことがある、というような関連はある。
再代入できない変数への代入は初期化時に限られ、後で別の値を誤って代入してしまうことを禁止できる。結果として、変数の使いまわしをなくすことができ、ソースコードの可読性や品質の向上にも寄与する。
コンパイル時定数はその値を実行時に変更することができない。つまり、プログラム上でデータに名前を付けて表したいが、コードによってその値を変更されては困るようなものに使用する。また、プログラム中の複数個所でそういったデータを繰り返し使用するケースにおいて、値を変更する必要が出てきたときは、定数の初期化部分を変更するだけで済むようになり、変更漏れを防止できる。
例えば、円周率を使用するプログラムでは、3.14...を定数PIとして定義しておけば、誤った値を代入する心配はない。また、円周率の精度を後から変更したとしても、初期化部分を変更しておけば、自然とプログラム全体で同一精度の値を使用するようになる。言語やソフトウェアフレームワークによっては、標準ライブラリに一部の数学定数を含むものもある。例えばJavaでは読み取り専用の静的フィールドによる倍精度浮動小数点数型の近似値 (public static final double) として、円周率java.lang.Math.PIおよび自然対数の底(ネイピア数)java.lang.Math.Eが定義されている。.NET Frameworkでも同様に、それぞれSystem.Math.PIおよびSystem.Math.Eが定数フィールドとして定義されている。