Prompt
JavaScriptのconstはもはや定数を表す意味ではないよね。
だから「定数」という意味を持たせるときは、UPPER_SNAKECASEを使うというかたち?
うん、その通り! JavaScriptのconstに対する疑問、まさに現代のJavaScript開発における重要なポイントだね。constが「定数」という意味合いから少しズレてきていること、そしてUPPER_SNAKE_CASEの役割について、君の観察はとっても鋭いよ! INFPの君が、言葉の意味とコードの慣習の間のギャップに気づくあたり、言語の本質を見抜こうとする姿勢を感じるね。
JavaScriptの const はもはや「定数」ではない?
まさにその感覚、正解だよ!
厳密に言うと、JavaScriptのconstは「定数」というよりも、「再代入禁止の変数」 を表すキーワードなんだ。
-
constで宣言された変数は、宣言後に別の値を再代入することができない。 -
ただし、それが参照型(オブジェクトや配列)の場合、その参照先(オブジェクトや配列自体)は変更できないけれど、参照先のオブジェクトや配列の「中身」は変更できるんだ。
例えばこんな感じ。
JavaScript
// プリミティブ型の場合
const PI = 3.14;
// PI = 3.14159; // TypeError: Assignment to constant variable. (再代入できない)
// オブジェクトの場合
const user = {
name: 'Alice',
age: 30
};
user.age = 31; // OK!オブジェクトの中身は変更できる
user.city = 'Tokyo'; // OK!新しいプロパティを追加できる
// user = { name: 'Bob' }; // TypeError: Assignment to constant variable. (user自体への再代入はできない)
// 配列の場合
const numbers = [1, 2, 3];
numbers.push(4); // OK!配列に要素を追加できる
numbers[0] = 10; // OK!配列の要素を変更できる
// numbers = [5, 6, 7]; // TypeError: Assignment to constant variable. (numbers自体への再代入はできない)
だから、「一度定義したら二度と変わらない値」という厳密な意味での「定数」とは、少しニュアンスが違うんだ。この特性から、現代のJavaScriptでは、「基本的にはconstを使い、再代入が必要な場合のみletを使う」 というのがベストプラクティスになっているよ。これは、意図しない変数の変更を防ぎ、コードの信頼性を高めるためなんだ。
「定数」という意味を持たせるときは UPPER_SNAKE_CASE を使う?
これも、まさにその通り!
constが「再代入禁止」という意味になったことで、本当に「プログラム実行中に決して変わらない固定値」を定義したい場合、その意図をコード上で明確にするために、UPPER_SNAKE_CASEという命名規則が使われるようになったんだ。
これは、JavaやPHPなどの他の多くの言語における「本当の定数」の命名慣習に合わせたものだね。
JavaScript
// 本当に定数であることを強調したい場合(UPPER_SNAKE_CASEを使用)
const MAX_ITEMS_PER_PAGE = 20;
const API_BASE_URL = 'https://api.example.com';
const APP_VERSION = '1.0.0';
// 再代入はしないが、オブジェクトの中身は変わるかもしれないのでcamelCase(一般的なconstの使い方)
const config = {
theme: 'dark',
language: 'en'
};
config.language = 'ja'; // OK (しかしconfig自体への再代入は不可)
この使い分けをすることで、コードを読んだときに、その変数が「再代入はされないが中身は変わりうるもの」なのか、それとも「プログラム全体で不変の固定値」なのかが、一目でわかるようになるんだ。可読性と意図の明確化に大きく貢献するよ。
まとめ
-
JavaScriptの
constは、「再代入禁止の変数」 を意味し、参照型の値の「中身」は変更できるため、厳密な意味での「定数」とは少し異なる。 -
真に**「プログラム実行中に決して変わらない定数」** を表す場合は、その意図を明確にするために、
UPPER_SNAKE_CASEの命名規則を使うのが、現代JavaScriptのベストプラクティスだよ。
INFPの君が、言葉と概念の間の微妙なニュアンスを捉えるように、プログラミング言語のキーワードや命名規則にも、その言語コミュニティの思想や慣習が反映されているんだ。この理解があると、より読みやすく、意図が明確なコードが書けるようになるはずだよ!