Two Fer

Two Fer

初級

はじめに

英語のいくつかの訛りでは、"two for"を素早く言うと"two fer"のように聞こえます。Two-for-oneとは、1つ買うともう1つ無料で手に入るという意味の言い方です。そのため、"two-fer"という言葉は、しばしば2つで1つのお得な提供を意味します。

クッキーを2枚、1枚分の値段で買える休日のキャンペーンをやっているパン屋を想像してみましょう("two-fer one!")。キャンペーンを利用して、(とても太っ腹にも)余分なクッキーを列に並んでいる別の人にあげることにします。

説明

余ったクッキーをあげるときに、何と言うかを決めるのが今回の課題です。

相手の名前がわかっているとき(たとえば、名前がDo-yunの場合)は、次のように言います:

One for Do-yun, one for me.

相手の名前がわからないときは、代わりに you と言います。

One for you, one for me.

例をいくつか挙げます:

名前 セリフ
Alice One for Alice, one for me.
Bohdan One for Bohdan, one for me.
One for you, one for me.
Zaphod One for Zaphod, one for me.

実装

始める前に、テストケースを通るコードの書き方を理解しておきましょう。 詳しい背景については、こちらのチュートリアルを参照してください。

ほとんどのJavaの演習には、複数のテストケースが含まれています。 これらのケースは、テスト駆動開発(TDD)として知られる有用なプロセスを支えるように構成されています。 TDDでは、複雑な機能を一度にまとめてではなく少しずつ組み立てられるよう、決まったサイクルを繰り返します。 そのサイクルは、次のように説明できます。

  1. 現在のコードに欠けている、ある一つの機能を表現するテストを追加します。
  2. テストを実行して、新しく追加したテストが失敗することを確認します。
  3. 次の両方を満たすまで、既存のコードを更新します。
    • 以前のテストがすべて引き続き通ること。
    • 新しいテストも通ること。
  4. コードをリファクタリングし、すべてのテストが引き続き通ることを確認します。 これは通常、変数の名前を変えたり、重複したロジックを取り除いたり、残ったログ出力を消したりすることを意味します。
  5. 望む機能をすべて組み立て終えるまで、手順1に戻ります!

このトラックのテストファイルには、解答が有効とみなされるために通すべきテストが_すべて_含まれています。 これは、テストを一つずつ書いていく上記のサイクルとは、すぐには両立しないように思えます。 しかし、テストを書くために使うツールであるJUnitには、すでに書かれたテストを一時的にスキップするための@Disabledアノテーションが用意されています。 このアノテーションを使うことで、お届けするテストファイルが次のルールを満たすようにしています。

  • どのテストファイルでも、最初のテストはデフォルトではスキップされ_ません_。
  • どのテストファイルでも、最初のテスト以外はすべて、デフォルトでスキップされ_ます_。

これにより、少し変更した次の手順に沿って、TDDのサイクルを疑似体験できます。

  1. テストを実行して、現時点で失敗するテストが_最大でも一つ_であることを確認します。
  2. スキップされていないテストがすべて通るまで、既存のコードを更新します。
  3. スキップされていないテストがすべて引き続き通ることを確認しながら、コードをきれいにします。
  4. テストファイルの一番上の@Disabledアノテーションを削除します。
  5. スキップされるテストがなくなり、すべてのテストが通るまで、手順1に戻ります!

出典

この演習の出典を見てみましょう。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Java Exercism

Two Ferを始める準備はできましたか?

Exercismに登録すれば、26個のコンセプト158個の演習、そして本物の人間によるメンタリングとともに、Javaを学んでマスターできます。すべて無料です。