TypeScriptにおける let
と const
は変数を宣言するために使用されるキーワードです。
これらは従来の var
キーワードに代わるものとして導入されました。let
と const
にはいくつか重要な特徴があり、より安全で読みやすいコードを書くのに役立ちます。
let
let
キーワードは、ブロックスコープのローカル変数を宣言するために使用されます。
ブロックスコープとは、変数が宣言されたブロック(例えば if
文や for
ループの内部)内でのみアクセス可能であることを意味します。
これは var
が関数スコープであるのと対照的です。var
で宣言された変数は関数全体で有効です。
function doSomething() {
if (true) {
let a = 5;
}
console.log(a); // Error: 'a' is not defined
}
上記の例では、a
は if
文のブロック内でのみ存在し、その外部で a
にアクセスしようとするとエラーが発生します。
const
const
キーワードも let
と同様にブロックスコープを持ちますが、const
で宣言された変数は、その値を再割り当てすることができません。
つまり、一度値が設定されると、その変数は読み取り専用となります。ただし、const
で宣言された変数がオブジェクトや配列の場合、オブジェクト自体のプロパティや配列の要素は変更できます(オブジェクトや配列の参照は変更できないが、内容は変更可能)。
const b = 10;
b = 20; // Error: Assignment to constant variable.
const obj = { key: 'value' };
obj.key = 'new value'; // This is allowed
obj = {}; // Error: Assignment to constant variable.
letとconstの比較
一般的に、変更される予定のない変数は const
を使って宣言することが推奨されています。
これはコードをより予測可能にし、バグを減らす助けになります。変数の値が変更される可能性がある場合にのみ let
を使用します。
let
と const
の使用により、コードの意図が明確になり、変数のスコープを小さく保つことができます。コードの保守性が向上し、意図しないエラーやバグの発生を抑制することができます。
varよりもletとconstが推奨される理由
既に書いたとおりの特徴ですが、TypeScriptでlet
とconst
がvar
の代わりに推奨されているのは、主にスコープと再代入に関する問題を解消するためです。
また、ホイスティングの挙動の違いもあります。
var
宣言の変数は、その関数全体で先に存在しているように振る舞います(ホイスティング)。これはコードを読みづらくし、バグの原因となることがあります。
一方で、let
とconst
はホイスティングはされますが、宣言前にアクセスしようとするとエラーが発生します(一時死ゾーン)。これにより、より明確なコーディングが可能です。