Immutable なクラスとは

2020/10/18 12:00

Immutable(イミュータブル)の概要/メリットについて動画でわかりやすく解説しました。実際のコードを用いてMutableに扱う場合との比較を行っています。実際できる事が変わるわけではありませんが、Immutableにクラスを作成しておく方がシンプルにもなり、バグが減る堅牢なものにもなりやすいです。参照をコピーする事で共有して、性能が上がるなどの効果もあります。20分弱の動画です。

Immutableなクラスとは

インスタンスが作成された後、状態が変わらないクラス( Immutable Class )のことを言います。逆にインスタンスのメソッドを呼ぶなどして中身の状態を変える事ができるものをMutableと呼びます。

ImmutableとMutableはクラスの作り方の哲学のようなものなので、それぞれによってできる事、できない事が大きく変わることはありませんが、コードの品質を高める際にImmutableの方が扱いやすいシーンが多いです。

Immutableのメリット・デメリット

  • クラスがシンプルになるメリットがあります

    • 単体テストがやりやすくなります。内部条件を持たないのでIN-OUTが考えやすいです
    • バグの原因が絞りやすくなります。意図しない動作をする際には生成した時点で何かおかしい可能性が高いです
  • スレッドセーフになるメリットがあります。

    • マルチスレッドのプログラミングでバグを生みにくいです
    • 常に同じ値なので、データの変更をブロックするコードが不要になります
  • 参照を共有しやすいメリットがあります

    • 意図しない原因で変更される可能性がないので、複数のオブジェクトで共有しても問題が起こりにくいです
    • 参照のコピーは軽い処理なので、参照を数多く共有しても性能が保ちやすいです
  • 変更時にはインスタンス生成を伴うので、生成のコストが気になるレベルのプログラミングの場合にはデメリットになる事があります

    • 最近のWEBの場合にはこれが大きなデメリットになることは少ないかもしれません
    • IoTなどやられている方は気にしてコードを書かれているケースがあると思います

解説に使用したコード ~ Sample code ~

https://github.com/CircleAround/pgonline/blob/master/src/20200929_immutable.ts

この記事を書いた人

佐藤 正志

サークルアラウンド株式会社 代表取締役