【いみゅーたぶる】
イミュータブル とは?
💡 「一度刻んだら変えられない」石碑のようなデータ
📌 このページのポイント
- イミュータブルなデータは変更ではなく、新しいコピーを作って更新する
- JavaScriptの文字列・数値はイミュータブル。オブジェクト・配列はミュータブル(変更可能)
- Reactのstateをimmutableに扱うことで、差分検知が効率化される
- 関数型プログラミングでは副作用を防ぐためにイミュータブルが基本原則
イミュータブルって何で変えちゃいけないの?
変えないほうがバグが少ないからだよ。データが変わらないと「どこかで意図せず変えられた」という問題が起きない。特に複数の場所から同じオブジェクトを参照しているとき、一方が変えると他方も影響を受けるバグを防げる。
毎回新しいオブジェクトを作るのって重くない?
素朴に実装すると重くなる。でもImmutable.jsやImmerのようなライブラリは「構造的共有」を使って、変わった部分だけ新しくして残りは共有する。だから実際はそんなに重くなることが多くない。
JavaScriptのconstって変えられないんじゃないの?
constはオブジェクトの「参照」を変えられないだけで、中身は変えられる。「const obj = {a: 1}」としてもobj.a = 2は普通にできる。完全にイミュータブルにしたければObject.freeze()を使うか、イミュータブルを前提にした設計にするしかない。
Reactでstateをimmutableにするのはなぜ?
まとめ:ざっくりこれだけ覚えればOK!
イミュータブルって出てきたら「変更できないデータ・変えたら新しいものを作る」と思えばだいたいOK!
📖 おまけ:英語の意味
「Immutable」 = 変更不可能な
💬 「im(否定)+ mutable(変化できる)」。反対語はミュータブル(mutable・変更可能)