定数
Constant
定数は、固定して扱う値や、再代入できない名前を指します。何を変更できなくするかは言語の機能によって異なります。JavaScriptのconstは名前と値の結び付きを固定するもので、オブジェクト内部まで自動で不変にしません。
🐾 猫で例えると?
写真に写る茶トラとアメショのツーショット。この圧倒的な可愛さは、昨日も今日も明日も決して変わることのない「真理」です。ITの世界にも、このように「一度決まったら絶対に変わらない(変えてはいけない)値」が存在し、それを「定数(Constant)」と呼びます。プログラムの中で「猫=可愛い」と定数で定義しておけば、再代入を禁じる言語では、間違って「猫=怖い」と入れ直そうとするとエラーになります。どこまで変更を防ぐかは、言語や値の種類によって確認が必要です。
💻 プログラミングにおける「定数」とは?
プログラミングにおいて、データを一時的に入れておく箱を「変数(Variable)」と呼ぶのに対し、一度値を入れたら二度と中身を取り替えられない「鍵付きの箱」が「定数(Constant)」です。JavaScriptでは const、Javaでは final といったキーワードを使って宣言します。
変更しない意図をコードに示すと、誤った再代入を見つけやすくなります。ただし税率など業務の値は、将来や適用条件によって変わることがあります。「この処理では固定」と「社会のルールとして永久に不変」を区別して管理します。
⚠️ 定数のメリットとマジックナンバーの排除
定数を使う最大のメリットは「安全性の向上」と、コードの「保守性の高さ」にあります。
マジックナンバー(意味不明な数字)を無くす
ソースコードの中に直接 0.1 や 3 といった数字を書くことを「マジックナンバー」と呼び、現場では嫌われます。これを定数に置き換えることで、その値を何に使うかを名前から読み取れるようになります。
const MAX_RETRIES = 3; // この例での再試行上限
let retryCount = 2;
console.log(retryCount < MAX_RETRIES); // true
const cat = { name: "茶トラ" };
cat.name = "アメショ"; // プロパティの変更は可能
console.log(cat.name);
// cat = {}; // これは再代入なのでTypeError 上限を定義へまとめると変更箇所が分かりやすくなります。ただし異なる処理が同じ数値を使っているだけなら、無関係な定数を一つへ統合しない方が、将来個別に変更しやすい場合もあります。
🛠️ 「定数」を賢く使うためのポイント
現場で定数を定義・利用する際の一般的なルールや注意点は以下の通りです。
- 名前はプロジェクトの規約に合わせる: 固定の設定値に大文字スネークケースを使う例がありますが、JavaScriptのconstで宣言したすべての変数を大文字にする必要はありません。用途が伝わる名前を優先します。
- スコープ(有効範囲)を意識する: アプリ全体で共通して使う定数(グローバル定数)なのか、特定の関数内だけで使う定数なのかを設計し、適切なファイルや位置で一元管理しましょう。
- Object.freezeは浅い固定: 直接のプロパティの追加・変更を制限しますが、内部にある別のオブジェクトまで自動的に凍結しません。入れ子の不変性が必要なら、その構造や更新方法も設計します。
「猫は可愛い」は飼い主にとって変わらない思いですが、プログラムの定数は言語ごとのルールで扱います。数値に意味の分かる名前を付け、再代入を防ぐことと、配列やオブジェクトの中身まで変更できなくすることを区別しましょう。