復習 - チケット売り場
CoddyのKotlinジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 16/57。
チャレンジ
中級3種類の宣言を使って、小さなチケット販売所を作成します。
Ticketには、number、show、seatを受け取る private コンストラクターがあります。その companion にはconst val SEATS = 3、private カウンター、そしてissue(show, seat)ファクトリがあり、チケットに 1、2、3、... の番号を付けます。issuedはこれまでに発行されたチケットの数です。label()は#1 Hamlet seat 2を返します。BoxOfficeは object です。sell(show, seat)は、座席が 1 からTicket.SEATSの範囲外ならno seat 4、その公演ですでに販売済みならseat 2 takenを返し、それ以外の場合はチケットを発行してそのラベルを返します。refund(number)は販売済みチケットの座席を解放してrefunded #1を返し、該当するチケットがなければno ticket #9を返します。report()は公演名をアルファベット順に並べてHamlet 2/3, Cats 1/3を返し、何も販売されていなければnothing soldを返します。
提供されたコードは、sell Hamlet 2、refund 1、または report のコマンドを読み取り、それぞれの応答を出力し、最後に件数を付けて tickets issued: を出力します。返金後も番号が再利用されることはありません。
コードは Ticket.kt と BoxOffice.kt に記述します。Main.kt には提供された入出力コードが含まれており、編集できません。
自分で試してみよう
fun main() {
// 提供された入出力コード: そのままにしておく
val input = generateSequence(::readLine).toList()
for (cmd in input) {
val p = cmd.split(" ")
when (p[0]) {
"sell" -> println(BoxOffice.sell(p[1], p[2].toInt()))
"refund" -> println(BoxOffice.refund(p[1].toInt()))
else -> println(BoxOffice.report())
}
}
println("tickets issued: ${Ticket.issued}")
}
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Kotlinプレイグラウンド