はじめに
Flutterを勉強中、Immutableという単語が出てきました。
「Immutableってなんぞ??」と疑問に思ったので、備忘のためにまとめます。
Immutableとは
Immutableとは不変、つまりは値が変わらないこと。
対義語はMutable、こちらは可変なので、値を変えることができます。
具体的に例を挙げて説明していきますね。
MutableとImmutableの使い分け
ユーザがレシピを作成して、オンライン上にアップすることができるWebサイトを例として使いましょう。
Aさんがとっても美味しい肉じゃがのレシピを考案しました。
「他の人にも食べてもらいたい!」と思い、サイトにオリジナル肉じゃがレシピをアップします。
すると、Bさんが「美味しそう!」と思い、自分用にそのレシピを保存しました。
しかしAさん、「お醤油は大さじ1じゃなくて大さじ1.5の方が美味しい!」とレシピを改良。
サイトにアップしていたレシピを編集し、お醤油の分量を大さじ1から大さじ1.5に変更しました。
ここで問題になるのが、最初にAさんがアップしたレシピがMutableかImmutableかです。
Mutable、つまり可変だった場合は、Aさんはオリジナルのレシピに上書きすることになります。
Bさんもオリジナルのレシピを参照しているので、突然お醤油の分量が大さじ1.5になって驚くわけですね。
「元々の分量の味が好きだったのに、その分量がわからない!!」とBさんは焦ってしまいます。
一方Immutableだった場合、つまり不変だった場合は、
Aさんはオリジナルのレシピは上書きできないので、オリジナルのレシピをコピーして、
そのコピーの値を変更することになります。
すると、Bさんはオリジナルのレシピを参照しているので、
Bさんが閲覧できるレシピは変更前の分量、つまりはお醤油の分量が大さじ1のレシピになります。
今回のBさんは変更前のレシピを気に入っていたので、Immutableにした方が適していましたね。
反対に、Bさんが「Aさんがレシピを変更したなら、絶対に変更後のレシピの方が美味しいに違いない!!」というAさん信者だった場合は、
MutableにしてAさんの変更をすべて反映できるようにしてあげた方が適しています。
その都度使い分けが必要なんですね。
まとめ
というわけで、Immutableとは値を変えることができないという意味でした。
対義語はMutable、こちらは値を変えることができるという意味です。
もともとの値を変えたくない場合はImmutable(不変)なオブジェクトを、
オリジナルを上書きしたい場合はMutable(可変)なオブジェクトを作りましょう。
以上、お読みいただきありがとうございました!