somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【TDD】テスト駆動開発入門12章完了

ついに、加法の実装をします。乗法と等価性長かった・・・

加法の細分化

加法を示すToDo「レートが2:1の場合、$5 + 10 CHF = $10」を直接始めません。$5 + $5 = $10から始め、小さなテストから実装していきます。

行ったこと(加法)

  • $5 + $5 = $10を確認するテストを実装した
  • 上記は何を行うか明白であったので、リズムのため、仮実装を行わずにすぐに実装した
  • $5 + $5 = $10を確認するテストを実装した

式(Expression)

以下の3つは最終的に通貨として扱われます。

$10 $5 + $5 ($2 + 3 CHF) * 5

一方で、通貨の(計算)式としても見ることができます。書籍では$10を式を構成する原始的な式としています。

為替レート

通貨に対して為替レートの適用を行う適切な存在が、書籍に書いてある銀行とreduceメソッドです。5W1hや英文法のSVOCに当てはめることがしっくりくるかもしれません。(目的を浮かべることで、インスターフェースを考えることにつながると思います)

  • 銀行は
  • 為替レートを適用する
  • $10に対して
  • $レートを
$適用した通貨 = $銀行->reduce($合計金額 'USD');

上記を下記のようにも書いても機能的には同じです。

  • 通貨は
  • 為替レートを自身に適用する
  • 銀行を利用して
  • $レートを
$適用した通貨 = $合計金額->reduce('USD', $銀行);

しかし、通貨(式)自身にはすでに役割があるので、為替レートの適用という振舞い・責任はないと考えます。書籍にある式ではなく銀行にすべきは、通貨を式として扱うということが暗にこめられているのだと思います。

行ったこと(銀行と式)

  • 式インターフェースを実装した(中身は空)
  • 銀行を実装した
  • 銀行にレート変換のスタブを作成し、仮実装した($10を返す)

今回、レート変換に渡す式(Expression)に対してタイプヒンティングを使用しました。

参考