はじめに
プログラミングにおいて「変数の再代入を避けるべき」という考え方は、特に関数型プログラミングやモダンなJavaScript/TypeScriptのコーディングスタイルでよく見られます。本記事では、その理由と利点を解説します。
再代入とは?
let x = 10;
x = 20; // 再代入
変数に新しい値を代入し直すことを「再代入」と呼びます。
なぜ再代入は避けられるのか?
1. 可読性の低下
変数の値が途中で変わると、コードを読む人が「この時点での値は何か?」を常に追跡する必要があります。特に長い関数や複雑なロジックでは混乱の原因となります。
2. バグの温床
意図しない再代入は予期せぬ挙動を引き起こすことがあります。特に非同期処理やクロージャを含む場合、変数の状態を正しく管理できないとバグが発生しやすくなります。
3. 関数型プログラミングの思想と逆行
関数型プログラミングでは「不変性(immutability)」を重視します。再代入を避けることで、副作用の少ない予測可能なコードを書けます。
どう書くべきか?
constの利用
再代入を避けるために、基本的にletではなくconstを使います。
const x = 10;
// x = 20; // エラーになる
新しい変数を作成する
既存の値を変更せず、新しい値を別の変数に割り当てます。
const x = 10;
const y = x + 10; // xは変わらず、yが新しい値を持つ
スプレッド構文の利用(オブジェクト・配列)
const arr = [1, 2, 3];
const newArr = [...arr, 4]; // arrは変更されない
まとめ
- 再代入は可読性低下やバグの原因になる
-
constを基本に、必要な場合のみletを使う - 関数型プログラミング的な不変性を意識すると安全で予測可能なコードになる
不変性を意識することで、チーム開発や大規模プロジェクトでも安心してコードを保守できます。