2章「明白な実装」に入る。
仕様が変わった。timesメソッドはDollarを返す様になった。 あ、今、私のtypoも見つかった。DollarじゃなくてDollerになってる・・・。
ともあれ、仕様変更の結果、テストはこうなった。
#[test] fn test_multiplication() { let five = Dollar { amount: 5 }; let five_times_two = five.times(2); assert_eq!(10, five_times_two.amount); let five_times_three = five.times(3); assert_eq!(15, five_times_three.amount); }
Dollar構造体のインスタンス(って表現して良いのかな?)がimmutableで良くなったので、 なんとなくコードの質的にもよくなった気がする。
さて、これを通すためにコードを修正するのだが・・・ コンパイルは出来るがエラーになる状態にするのが難しい。流石Rustである。 というわけで、コンパイルが通るようにしたらここまで直してしまった。
impl Dollar { pub fn times(&self, multiplier: i32) -> Dollar { Dollar { amount: self.amount * multiplier, } } }
mutableな借用を貰えなくなったが、もちろんそれで問題ない。 テストはちゃんと通った。よしよし。
テストコードだが、Javaのコードに対応するためにfive.times()の戻りを 変数に代入しているが、immutableにしているのでその直後でしか使っていない。 なら、直接assert_eq!に渡してしまっても同じなので、変更しちゃう。
#[test] fn test_multiplication() { let five = Dollar { amount: 5 }; assert_eq!(10, five.times(2).amount); assert_eq!(15, five.times(3).amount); }
もちろん、テストがグリーンのままであることを確認しておく。 これで2章は終わりだ。