-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
第13章 実装を導くテスト #17
第13章 実装を導くテスト #17
Conversation
仮実装のreduceメソッドの |
細かく行くところだが、今回は進んで見る。TODOにひとつ追加。 |
TODO
|
ここで、ExpressionクラスはSumクラスなどの親っぽいクラスであることに注意。 |
plusメソッドはExpressionのクラス、もといSumクラスを返す必要がある。 |
これをテストに加える。 |
当然、Sumがないのでテストは落ちる。
|
このテストは長生きするとは思っていない。内部実装に深く関連したテストだからだ。外部から見た振る舞いのテストにはなっていない。 |
実装はしたが、crystal特有のコンパイルエラーになる。
|
Nilを許容するようにして、この部分のコンパイルを通した。 |
現在のコンパイルエラーはこれ。
javaの |
コンパイルエラー。
Sumにinitializeがない。 |
コンパイルエラー。
plusが返す型はExpressionじゃないとだめだ。 |
コンパイルエラーは通ったが、テストが落ちる。
Sumのinitializeでプロパティに値を入れていないから。 |
テストが通った。
|
|
テストは落ちる。
|
コンパイルエラー
augendが |
コンパイルエラー
amountはprivateだった。 |
テスト通った。
|
悪臭を放っている。
|
なるほど。チェインの連鎖はこうやって移動して短くするのか。 |
TODO
|
Bankのreduceメソッドに渡すExpressionがMoneyインスタンスの場合はどうするか、をTODOリストに加えた。 今は足し算のオブジェクトを渡しているが、Moneyを渡す時ももちろんあるので、このケースを思い出したからTODOに入れた。 |
現在はグリーンバーなので、TODOリストのテストを書こう。 「Bank.reduce(Money)」だ。 |
グリーンにしたのでリファクタリングしていこう。 |
クラスの明示的なチェックはポリモーフィズムに置き換えるべき。 今はMoneyとSumでインターフェースが異なるので、このような分岐が発生している。Moneyもreduceを実装すれば、reduceの宣言をExpressionに移動できる。 |
ExpressionとBankが同じreduceを持っているし、シグネチャが違う。キーワード引数とかだと、うまく表現できるかもしれないが、とりあえず今はこのようにする。 |
TODO
|
振り返り。
|
13章終了。 |
TODO