Scalaでcase classのメンバーを更新する
Scalaを始めて1ヶ月ぐらいたったので、つまづいたところをまとめていこうと思う。
Scalaは基本的にcase class
という雛形的なclassを使うようにするんですが、メンバーをどう更新するか分からなかったのでメモ。
例えば、ユーザー情報が入ったモデルがあったとします。
case calss User( name: String, email: String, age: Int, city: String, tel: String, zipCode: String)
このモデルをなんかしらの処理で取得します。そして、ageだけを29として更新したいとします。Javaならセッターがあるけど、scalaではvalで宣言されてるからセットはできない。
最初はこんな風に書いてまして。
val user = getSomeUser val newUser = User( user.name, user.email, 29, user.city, user.tel, user.zipCode)
なんかめんどくさいけど、immutableとはこういことかなと勝手に納得してたけど、そんなことはなくて、ひしだまさんのブログ見てて、copyというメソッドを用意されてることに気づいた。
val user = getSomeUser val newUser = user.copy(age = 29)
これだけでよかった。引数の名前付き呼び出しって便利だし分かりやすくていいですね