第2章 多通貨マネー
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
速くついて、速くついていく
エドガー・アレン・ポー『ワタリガラス
第1章で行ったレッド・グリーン ・リファクターのサイクルは、遅すぎると感じただろうか?
ヘック・イェス!」(あるいは韻を踏んだフレーズ)というレスポンスは理解できる!
テスト駆動開発のゴールは、無理に遅くすることでも、速くすることでもない。テスト駆動開発のゴールは、自分たちが納得できるペースで開発を進めることだ。
この章では、追加の通貨と、任意の通貨でお金を掛けたり割ったりする機能を紹介する。少しペースを上げてみよう。
ユーロに参入する
、2つ目の項目は新通貨の導入である:
5米ドル×2=10米ドル |
10ユーロ×2=20ユーロ |
4002 krw / 4 = 1000.5 krw |
5米ドル+10ユーロ=17米ドル |
1 USD + 1100 KRW = 2200 KRW |
これは、前章で作成したDollar よりも一般化したエンティティが必要であることを示している。Money のようなもので、amount (すでに持っている)とcurrency (まだ持っていない)をカプセル化するものである。この新しい機能を具体化するためのテストを書いてみよう。
Go
money_test.go で新しいテストを書いてみよう。このテストは、"10 EUR "を表す構造体が2倍されると "20 EUR "になることを要求する:
funcTestMultiplicationInEuros(t*testing.T){tenEuros:=Money{amount:10,currency:"EUR"}twentyEuros:=tenEuros.Times(2)iftwentyEuros.amount!=20{t.Errorf("Expected 20, got: [%d]",twentyEuros.amount)}iftwentyEuros.currency!="EUR"{t.Errorf("Expected EUR, got: [%s]",twentyEuros.currency)}}
このテストでは、「10 EUR」と「20 EUR」の概念を、currency とamount を含むstruct インスタンスで表現する。
ここまでで、このテストを実行すると、次のようなエラーが出ることがわかった。 undefined: Money.これは、新しい構造体を導入することで解消できる:
typeMoneystruct{amountintcurrencystring}
type Money has no field or method Times というエラーが発生するが、これを回避する方法はわかっている。Money に対してTimes メソッドを定義する:
func(mMoney)Times(multiplierint)Money{returnMoney{amount:m.amount*multiplier,currency:m.currency}}
やった!また緑のテストだ。
JavaScript
Money オブジェクトをamount とcurrency で表すテストを書いてみよう。10 EUR "を表すオブジェクトに2を掛けると ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access