本文へスキップ

不変性とは?

ふへんせい

不変性とは、一度作成されたデータオブジェクト状態を変更できないという性質のことで、プログラムの予測可能性と安全性を高めます。

不変性(Immutability)とは、データオブジェクトが一度生成されたあと、その内容を変更できないという性質を指します。不変なオブジェクトは「イミュータブル」(immutable)とも呼ばれます。

プログラミングにおいて、状態を変更しながら処理を進める「ミュータブル(可変)」なスタイルは直感的ですが、複雑なシステムではバグや競合状態の温床になります。一方、不変なデータを使うと、値がどこかで意図せず書き換えられる心配がなくなり、コードの振る舞いが予測しやすくなります。

不変性がもたらす主なメリットは次のとおりです。

  • スレッド安全性:複数のスレッドが同じオブジェクトを読んでも競合が起きない
  • 副作用の排除:関数が受け取ったデータを書き換えないため、バグの追跡が容易
  • キャッシュと最適化:変更されないことが保証されるので安全にキャッシュできる
  • 時間旅行デバッグ:状態変化の履歴を保持しやすくなる(Reduxなど)

Haskell や Elm などの純粋関数型言語ではすべてのデータがデフォルトで不変です。JavaScriptでは constObject.freeze()、ReactのImmutable.jsなどで不変性を実現します。Rustは変数をデフォルトで不変とし、明示的に mut を付けた場合のみ変更可能にします。日々の開発において不変性を意識することは、信頼性の高いコードを書くうえで非常に重要な考え方です。

使い方・例文

Reactの状態管理で、配列にアイテムを追加する際に元の配列を直接変更せず [...oldArray, newItem] のようにスプレッドで新しい配列を作るのが不変性を守る典型的な書き方です。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語