Slide 14
Slide 14 text
03 ─ 値が不変だと何が嬉しいのか
同時に確定する状態(Scala)
case class Wallet(balance: Int, count: Int) {
def transfer(amount: Int): Wallet =
Wallet(balance - amount, count + 1)
// ↑ 残高と回数が同時に確定した新しい財布
}
val w0 = Wallet(1000000, 0)
val w1 = w0.transfer(10000)
// w0: (1000000, 0) … 送金前の財布
// w1: ( 990000, 1) … 送金後の財布
// 「残高だけ減った財布」は書きようがない
不変な値では、状態の変化を全フィールドが同時
に確定した新しい値としてしか表現できない。
つまり不正な中間状態が、そもそも実在しない。
存在するのは送金前と送金後、2つの正しい財布
だけ。
中間状態が消えれば「この瞬間に参照・操作して
はいけない」という制約も丸ごと消える — 守るべ
きルールではなく、ルールが必要な状況自体をな
くす。
可変(Java)
1つの財布が時間とともに姿を変え、途中の不正な姿
が存在してしまう。
不変(Scala)
存在するのは w0 と w1 という2つの完成品だけ。途
中がない。