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の君が、言葉と概念の間の微妙なニュアンスを捉えるように、プログラミング言語のキーワードや命名規則にも、その言語コミュニティの思想や慣習が反映されているんだ。この理解があると、より読みやすく、意図が明確なコードが書けるようになるはずだよ!