第9章. 通貨、通貨、どこまでも
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
ささやかな変化、ささやかな驚き、それが私の持久力、ひいては人生の通貨なのだ。バーバラ・キングソルバー
Portfolio のMoney エンティティに対する評価機能の現状は以下の通りだ:
-
ある通貨の
Moneyを同じ通貨に換算する場合、Moneyのamountを返す。これは正しい。どの通貨とそれ自体の為替レートも1である。 -
それ以外のケースでは、
Moneyのamountに固定数値(1.2)が掛けられる。このレートはUSDからEURへの変換のみを保証するものである。この為替レートを変更したり、他のレートを指定したりする方法はない。
私たちの通貨変換コードは、あることを正しく行い、別のことをほぼ正しく行っている。そろそろ両方のケースで正しく動作するようにしよう。この章では、通貨固有の為替レートを使って、ある通貨から別の通貨にお金を変換する方法を、ついに紹介する。
モノのハッシュ(マップ)を作る
必要なのは、"from "通貨と "to "通貨を指定して為替レートを検索できるハッシュマップである。 このハッシュマップは、表9-1に示すように、銀行や空港の両替カウンターでよく目にする為替レート表を表現したものである。
| より | へ | レート |
|---|---|---|
ユーロ |
米ドル |
1.2 |
米ドル |
ユーロ |
0.82 |
米ドル |
韓国ウォン |
1100 |
韓国ウォン |
米ドル |
0.00090 |
ユーロ |
韓国ウォン |
1344 |
韓国ウォン |
ユーロ |
0.00073 |
この表を読み取るには、次のパターンを使う:「受取国」通貨の金額が与えられたら、「受取国」通貨の等価性を得るために「レート」を掛ける。
第8章で述べたように、どの通貨ペアでも相互のレートは算術的な逆数ではない。1表9-1のレートに基づき、100EURをUSDに換え、EURに戻すと、98.4EURとなり、元の100EURとは異なる。これは為替レート表ではよくあることで、銀行が儲ける方法の一つである!2
機能リストの次の2、3の項目は、為替レートテーブルの実装をコードに組み込む機会を与えてくれる。新しい通貨を導入することで、これを実現しよう:
5米ドル×2=10米ドル |
10ユーロ×2=20ユーロ |
4002 krw / 4 = 1000.5 krw |
5米ドル+10米ドル=15米ドル |
テストコードを本番コードから分離する |
冗長性テストを削除する |
5米ドル+10ユーロ=17米ドル |
1 USD + 1100 KRW = 2200 KRW |
関係する通貨に基づいて為替レートを決定する(→から)。 |
為替レートの変更を許可する |
追加通貨を導入する際、TPP(Transformation Priority Premise:優先順位変換の前提)を実際に使ってみることにする。つまり、バベルの塔式のif-else連鎖で条件付きコードを増やす代わりに、為替レートを調べることができる新しいデータ構造を導入するのだ。3
チップ
変換優先の前提は、テストがより具体的になるにつれて、本番コードは一連の変換を通じてより汎用的になるというものだ。
Go
新しいテストを書こう。このテストも、前回のテストと同じように複数の通貨を使用する。 今回使う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