復習 - 図書館カード
CoddyのKotlinジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 6/57。
チャレンジ
中級クラス LibraryCard(val name: String, val limit: Int = 3) を宣言します。その init ブロックでは、空白以外の文字を含む名前(name is empty)と、1 以上の上限(limit must be positive)が必要です。借りているタイトルのリストを保持します。borrow(title) は、カードが上限に達しておらず、すでにそのタイトルを保持していない場合に、true を返してタイトルを追加します。giveBack(title) は、タイトルを削除できた場合に true を返します。status() は、借りた順に Ada: 2/3 (Dune, Emma) を返し、何も借りていない場合は Ada: 0/3 を返します。
提供されたコードは、名前、上限(デフォルトを使用する場合は空行)、続いて +title または -title のコマンドを読み取ります。各コマンドに対して ok または no を出力し、最後に status() を出力します。無効なカードの場合は、代わりにエラーメッセージを出力します。
コードは LibraryCard.kt に記述します。Main.kt には提供された入出力コードが含まれており、編集できません。
自分で試してみよう
fun main() {
// 提供された入出力コード: そのままにしておく
val input = generateSequence(::readLine).toList()
try {
val card = if (input[1].isEmpty()) LibraryCard(input[0]) else LibraryCard(input[0], input[1].toInt())
for (cmd in input.drop(2)) {
val title = cmd.drop(1)
val done = if (cmd.startsWith("+")) card.borrow(title) else card.giveBack(title)
println(if (done) "ok" else "no")
}
println(card.status())
} catch (e: IllegalArgumentException) {
println(e.message)
}
}
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Kotlinプレイグラウンド