定数
Constant
概要(サマリー)
定数とは、一度決めたら基本的に変更しない値に名前を付けて、プログラム内で安全に使いやすくするための仕組みのことである。
変数が「あとから中身を変える可能性のある箱」だとすると、定数は「基本的に中身を変えない前提の箱」に近い。たとえば、消費税率、最大表示件数、固定の設定値、APIのエンドポイント名など、プログラムの中で何度も使うが勝手に変わってほしくない値に使われる。定数を使うことで、コードの意味が分かりやすくなり、修正ミスも減らしやすくなる。
詳細解説
定数は「変えない前提の名前付きの値」である
プログラムでは、数字や文字列などの値を何度も使うことがある。
その値を直接コードの中に書くこともできるが、何度も出てくる値を毎回直接書いていると、あとで修正しづらくなる。
そこで使うのが定数である。
定数は、値に分かりやすい名前を付けて管理するために使う。
たとえば、JavaScriptでは次のように書ける。
const TAX_RATE = 0.1;
const MAX_ITEMS = 20;
const SITE_NAME = "Noveblo Tools";
この例では、
TAX_RATEに税率MAX_ITEMSに最大件数SITE_NAMEにサイト名
を入れている。
これらは、プログラムの途中で何度も変えるものではなく、固定値として扱いたい値である。
なぜ定数が必要なのか
定数を使う大きな理由は、コードを読みやすくし、変更に強くするためである。
たとえば、コードのあちこちに 0.1 と直接書かれていた場合、それが税率なのか、割引率なのか、何かの係数なのか分かりにくい。
しかし、TAX_RATE と書かれていれば、「これは税率なのだな」とすぐ分かる。
また、同じ値を複数箇所で使っている場合、あとで変更が必要になったときに定数の定義部分だけを直せば済むことが多い。
直接値を何か所にも書いていると、修正漏れが起きやすくなる。
つまり定数には、次のようなメリットがある。
- 値の意味が分かりやすくなる
- 同じ値を再利用しやすい
- 修正箇所をまとめやすい
- 誤って値を書き換えるリスクを減らせる
Variable との違い
定数とよく比較されるのが Variable である。
どちらも「値に名前を付ける」という点では似ているが、考え方が違う。
- Variable
状況に応じて値が変わるもの - Constant
基本的に値を変えないもの
たとえば、カウンターの現在値やユーザーの入力値は変わる可能性があるためVariableに向いている。
一方、消費税率、1ページあたりの表示件数、固定の設定名などはConstantに向いていることが多い。
JavaScriptでは、次のように使い分ける。
let count = 0;
count = count + 1;
const MAX_COUNT = 10;
count は増えていく値なので let を使い、MAX_COUNT は固定の上限値なので const を使っている。
初心者のうちは、「あとから変わるなら変数、変えないなら定数」と覚えると整理しやすい。
Literal との違い
もう1つ混同しやすいのが Literal である。
Literalとは、コードの中に直接書かれた値そのものを指す。
たとえば次のコードでは、1000 と "Hello" がLiteralである。
const price = 1000;
const message = "Hello";
一方、price や message は、その値に付けられた名前である。
つまり、Literalは「値そのもの」、Constantは「変えない前提で名前を付けた値」と考えるとわかりやすい。
たとえば次のように、直接値を書くより定数にしたほうが意味が分かりやすくなることがある。
const FREE_SHIPPING_THRESHOLD = 5000;
if (totalPrice >= FREE_SHIPPING_THRESHOLD) {
console.log("送料無料です");
}
ここで 5000 だけを見るより、FREE_SHIPPING_THRESHOLD と書かれていたほうが、「送料無料になる基準額」だと分かりやすい。
定数に向いている値
定数に向いているのは、プログラムの中で意味を持つ固定値である。
たとえば次のようなものがある。
税率や割合
const TAX_RATE = 0.1;
最大件数や上限値
const MAX_UPLOAD_SIZE_MB = 5;
固定の文字列
const DEFAULT_USER_NAME = "guest";
設定値
const API_BASE_URL = "https://example.com/api";
ステータス名
const STATUS_ACTIVE = "active";
const STATUS_INACTIVE = "inactive";
このように、何度も使う固定値に名前を付けておくと、コード全体の見通しがよくなる。
定数名の書き方
定数名の書き方は、言語やプロジェクトのルールによって違う。
ただし、変更しない固定値を目立たせるために、すべて大文字で書くスタイルもよく使われる。
const MAX_ITEMS_PER_PAGE = 20;
一方で、JavaScriptでは通常の const 変数のように、キャメルケースで書くことも多い。
const userName = "Taro";
この場合、const は「再代入できない」という意味を持つが、必ずしも「絶対的な固定設定値」というニュアンスではないこともある。
そのため、実務ではプロジェクトの命名ルールに合わせるのが大切である。
JavaScriptのconstで注意すること
JavaScriptの const は、「その変数に別の値を再代入できない」という意味である。
ただし、オブジェクトや配列の中身まで完全に変更不能になるわけではない。
たとえば、次のようなコードはエラーになる。
const userName = "Taro";
userName = "Jiro";
userName に別の文字列を再代入しようとしているためである。
一方で、次のようなコードは動く。
const user = {
name: "Taro"
};
user.name = "Jiro";
これは、user という入れ物自体を別のものに差し替えているのではなく、中のプロパティを書き換えているためである。
つまりJavaScriptの const は、「中身が絶対に変わらない」という意味ではない点に注意が必要である。
定数を使うメリット
コードの意味が分かりやすくなる
0.1 と書くより TAX_RATE と書いたほうが、何の値か分かりやすい。
修正漏れを防ぎやすい
同じ値をあちこちに直接書くより、定数として1か所で管理したほうが修正しやすい。
誤変更を防ぎやすい
変えてはいけない値を定数にしておくことで、うっかり書き換えるリスクを下げられる。
AIにも意図が伝わりやすい
AIにコードを読ませるときも、定数名が分かりやすいと、値の役割を推測しやすくなる。
定数を使うときの注意点
何でも定数化すればよいわけではない
一度しか使わない単純な値まで全部定数にすると、逆にコードが読みづらくなることがある。
意味のある固定値や、再利用される値を中心に定数化するとよい。
名前を雑にしない
VALUE1 や DATA のような名前では、何の定数なのか分かりにくい。
定数は「意味を伝えるため」に使うので、名前はかなり重要である。
値の変更可能性を考える
将来変わる可能性がある設定値は、コード内の定数ではなく、設定ファイルや環境変数で管理したほうがよい場合もある。
たとえば本番環境と開発環境で変わるAPI URLなどは、環境変数にしたほうが安全なことが多い。
AIコーディングとの関係
AIにコードを書かせると、値を直接書くこともあれば、定数として切り出してくれることもある。
このとき定数の意味を理解していると、「なぜこの値を別で定義しているのか」が分かりやすくなる。
また、AIにリファクタリングを依頼するときにも、定数の考え方は重要である。
たとえば次のように依頼できる。
このコード内で何度も出てくる固定値を、意味のある定数として切り出してください。
こうすると、マジックナンバーや重複した文字列を整理しやすくなる。
AIが生成したコードを読みやすく保つためにも、定数はかなり重要な考え方である。
よくある勘違い
constなら中身は絶対に変わらない?
JavaScriptでは、const は再代入できないという意味である。
オブジェクトや配列の中身まで完全に変更不能にする仕組みではない。
一度しか使わない値も全部定数にすべき?
必ずしもそうではない。
意味のある固定値、複数回使う値、後から変更される可能性がある値を中心に定数化すると読みやすい。
定数名は短いほどよい?
短ければよいわけではない。
X や VALUE のような名前では意味が伝わりにくいため、値の役割が分かる名前にすることが大切である。
まとめ
- 定数は、一度決めたら基本的に変えない値に名前を付けて扱う仕組みである。
- 値の意味を明確にし、修正漏れや誤変更を減らすのに役立つ。
- JavaScriptの
constは再代入を防ぐが、オブジェクトの中身まで固定するとは限らない。 - AIにリファクタリングを頼むとき、固定値を意味のある定数へ切り出す指示が有効である。
情報ソース
より詳しくAIに聞いてみよう
- 定数とは何かを、中学生でもわかるように具体例つきで説明してください。
- Constant と Variable と Literal の違いを、初心者向けに整理してください。
- JavaScriptの const は何を固定しているのか、具体例つきで説明してください。
- マジックナンバーを定数にするメリットを教えてください。
- AIにコード内の固定値を定数化してもらうときのプロンプト例を作ってください。