LoginSignup
5
5

More than 3 years have passed since last update.

Immutableとは?Mutableとの違い

Last updated at Posted at 2020-06-16

Immutableとは

プログラミングにおいてImmutable(イミュータブル)とは「不変」という意味で、オブジェクトの状態が変わらないことを指します。

逆に、元のデータが変更可能なオブジェクトの性質をMutable(ミュータブル)と言います。

ImmutableとMutableの違い

Immutable(イミュータブル)とMutable(ミュータブル)の違いについて、実際にみていきましょう。

まずは、日付操作ライブラリ「Carbon」を使って現在日時を取得してみます。

sample.php
$now = \Carbon\Carbon::now();//2020-05-26 06:57:02.027091

現在日時が取得できました。
次に、addDayメソッドで上記で取得した現在日時に1日加算してみます。

sample.php
$tomorrow = $now->addDay();//2020-05-27 06:59:01.25073

1日加算されています。

ここで$nowの中身を再びみてみます。

sample.php
var_dump($now);//2020-05-27 06:59:01.25073

なんと、\$nowまで1日加算され、\$nowと\$tomorrowが同じ結果となってしまいました。
これは、\$nowと\$tomorrowが同じオブジェクトであるために起こります。
元の状態の変化を防ぐにはcopyメソッドを使います。

copyメソッドで元の状態を保持

copyメソッドで元のオブジェクトを複製して、2つの変数の結果を見てみましょう。

sample.php
$tomorrow = $now->copy->addDay();
var_dump($now);//2020-05-26 06:57:02.027091
var_dump($tomorrow);//2020-05-27 06:59:01.25073

元のオブジェクトはそのままで、$tomorrowだけ1日加算されました。

Carbonのバージョン2系では、このImmutable(イミュータブル)版が利用できるようになっています。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5