トラック
/
F#
F#
/
演習
/
美容院の予約
美容院の予約

美容院の予約

学習演習

はじめに

日時

F#のDateTimeは、日付と時刻の両方の情報を持つ、変更できないオブジェクトです。DateTimeのインスタンスは、そのメソッドを呼び出すことで操作します。一度DateTimeを作成すると、その値を変更することはできません。DateTimeを変更しているように見えるメソッドや関数は、実際には新しいDateTimeを返します。

日付や時刻をテキストで表すときの形式は、_カルチャー_によって変わります。日付が2019年3月28日、時刻が14時30分59秒に設定されたDateTimeを考えてみましょう。このDateTimeをen-USカルチャー(アメリカ英語)でstringに変換すると、"3/28/19 2:30:59 PM"が返ります。fr-BEカルチャー(ベルギーで使われるフランス語)では、同じコードでも違う値が返ります。"28/03/19 14:30:59"です。

どのDateTimeメソッドがカルチャーに依存するかを理解しておくことは大切です。一般に、stringを扱うDateTimeメソッド(入力でも出力でも)は、現在のカルチャーに依存します。

説明

この演習では、2012年9月15日にオープンしたニューヨークの美容サロン向けの、予約スケジューラーに取り組みます。

4つのタスクがあり、どれも予約の日付を扱います。日付と時刻は、次の3つの形式のいずれかを使います:

  • "7/25/2019 13:45:00"
  • "July 25, 2019 13:45:00"
  • "Thursday, July 25, 2019 13:45:00:00"
Caution

テストは自動的にカルチャをen-USに設定します。カルチャを自分で設定したり指定したりする必要はありません。

1. 予約日を解析する

schedule関数を実装して、予約日のテキスト表現を対応するDateTime形式に解析できるようにしましょう:

schedule "7/25/2019 13:45:00"
// => DateTime(2019, 7, 25, 13, 45, 0)

2. 予約がすでに過ぎているか確認する

hasPassed関数を実装して、予約日を受け取り、その予約が過去のどこかで過ぎているかどうかを確認しましょう:

hasPassed (DateTime(1999, 12, 31, 9, 0, 0))
// => true

3. 予約が午後かどうか確認する

isAfternoonAppointment関数を実装して、予約日を受け取り、その予約が午後(12:00以降、18:00未満)かどうかを確認しましょう:

isAfternoonAppointment (DateTime(2019, 03, 29, 15, 0, 0))
// => true

4. 予約の時刻と日付を説明する

description関数を実装して、予約日を受け取り、その日付と時刻の説明を返すようにしましょう:

description (DateTime(2019, 03, 29, 15, 0, 0))
// => "You have an appointment on 3/29/2019 3:00:00 PM."

5. 記念日を返す

anniversaryDate関数を実装して、今年の記念日である9月15日を返すようにしましょう:

anniversaryDate()
// => DateTime(2019, 9, 15, 0, 0, 0)
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
F# Exercism

美容院の予約を始める準備はできましたか?

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