Quantcast
Channel: laravel5.8タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 87

Immutableとは?Mutableとの違い

$
0
0

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.027091var_dump($tomorrow);//2020-05-27 06:59:01.25073

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

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


Viewing all articles
Browse latest Browse all 87

Trending Articles