Skip to Content
テスト駆動開発を学ぶ
book

テスト駆動開発を学ぶ

by Saleem Siddiqui
May 2025
Intermediate to advanced
280 pages
3h 35m
Japanese
O'Reilly Media, Inc.
Content preview from テスト駆動開発を学ぶ

第9章. 通貨、通貨、どこまでも

この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com

ささやかな変化、ささやかな驚き、それが私の持久力、ひいては人生の通貨なのだ。

バーバラ・キングソルバー

PortfolioMoney エンティティに対する評価機能の現状は以下の通りだ:

  1. ある通貨のMoney同じ通貨に換算する場合、Moneyamount を返す。これは正しい。どの通貨とそれ自体の為替レートも1である

  2. それ以外のケースでは、Moneyamount に固定数値(1.2)が掛けられる。このレートはUSDからEURへの変換のみを保証するものである。この為替レートを変更したり、他のレートを指定したりする方法はない。

私たちの通貨変換コードは、あることを正しく行い、別のことをほぼ正しく行っている。そろそろ両方のケースで正しく動作するようにしよう。この章では、通貨固有の為替レートを使って、ある通貨から別の通貨にお金を変換する方法を、ついに紹介する。

モノのハッシュ(マップ)を作る

必要なのは、"from "通貨と "to "通貨を指定して為替レートを検索できるハッシュマップである。 このハッシュマップは、表9-1に示すように、銀行や空港の両替カウンターでよく目にする為替レート表を表現したものである。

表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

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

はじめての知識グラフ構築ガイド

はじめての知識グラフ構築ガイド

Jesus Barrasa, Jim Webber
初めてのGraphQL ―Webサービスを作って学ぶ新世代API

初めてのGraphQL ―Webサービスを作って学ぶ新世代API

Eve Porcello, Alex Banks, 尾崎 沙耶, あんどうやすし
ユーザーストーリーマッピング

ユーザーストーリーマッピング

Jeff Patton, 川口 恭伸, 長尾 高弘

Publisher Resources

ISBN: 9798341650992