ミュータブルとイミュータブルについて | 株式会社スタイラジーの「居心地の良い」ブログ

株式会社スタイラジーの「居心地の良い」ブログ

会社の事や仕事の事、
その他イベントなど、
色々な話題を思うがままに
株式会社スタイラジー社員
の日常を紹介します。

株式会社スタイラジーの
「居心地の良い」ブログ、
2008年1月7日スタート!

今回はミュータブルとイミュータブルについて書かせてもらいます。

ミュータブルとイミュータブルですが英語で書くと mutable と immutable。
日本語の意味としては、それぞれ可変と不変になります。

プログラムでも、取り扱うデータの種類によってミュータブルだったりイミュータブルだったりするので注意が必要ですが、
その中でもミュータブルの代表例ともいえる Carbon(Dateオブジェクト) を使って確認してみたいと思います。

こんな処理を実装することがあるかどうかわかりませんが、明日から5日間に渡って割引セールを行うので、
その期間(開始日と終了日)を画面に表示しようとしているECサイトがあるとします。
※ 以前紹介した便利ツール tinker  を使って説明します。

 

 

を使って説明します。




上記のように、Carbonを使って明日の日時と、明日から5日後の日時を導き出したとします。
(処理実施日が2020年1月9日のため明日の日付が2020年1月10日になっています。ご了承ください)
最後の行で `$start_date` と `$end_date` を使って期間を表示する処理を記載していますが、どのように表示されるでしょうか。

結果は以下のようになります。



プログラムでは、データを操作した時点で元データが変化してしまうものがミュータブルです。
ここでは `$start_date` に対して `addDay(5)` を行った時点で `$start_date` が5日後になってしまっており、
このことに気づいていなかったり、忘れてしまっていたりすると余計な時間を取られてしまうことなります。

では、どのようにして明日から5日間を導き出せば良いのかというと、




このように `copy()` メソッドを使って明示的に複製してあげることで解決可能です。
次のようなやり方もあります。




また、Carbonにはイミュータブル版が存在するのでそちらを使うというのも方法の一つだと思います。
(意識して使い分けた方がミスが起りにくいかもしれません)





では、また!
 

 

* * * * * * * * * * * * * * * *

スタイラジー 2021年卒

 

会社説明会予約受付中!!

 

6月より会社説明会を東京/大阪で開催しますキラキラ

少しでも気になった方は、お気軽に参加してくださいねチョキ

 

マイナビ2021より申し込みこちら

https://job.mynavi.jp/21/pc/search/corp84856/outline.html

 

* * * * * * * * * * * * * * * *