Повторение — читательский билет
Часть раздела Объектно-ориентированное программирование путешествия по Kotlin на Coddy. Урок 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)
}
}
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовПервичные конструкторыБлоки init и валидацияВторичные конструкторыПовторение — читательский билет4Наследование
Открытые классы и подклассыПереопределение членовsuper и конструкторыАбстрактные классыПовторение — каталог сотрудников7Специальные классы
Классы данныхКлассы перечисленийЗапечатанные иерархииequals, hashCode, toStringПовторение — трекер заказов10Паттерны проектирования. Часть 2
Делегирование с помощью byПаттерн декораторПаттерн строительПаттерн состояние2Свойства и инкапсуляция
Пользовательские аксессорыМодификаторы видимостиПриватные сеттерыlazy и lateinitПовторение — банковский счёт5Интерфейсы
Объявление интерфейсовМетоды по умолчаниюМножественные интерфейсыИнтерфейсы как типыПовторение — способы оплаты8Обобщения
Обобщённые функцииОбобщённые классыОграничения типовВариативность с in и outПовторение — очередь с приоритетом11Проект: Управление библиотекой
Книги и читателиВыдача книг3Объекты и компаньоны
Объявления объектовОбъекты-компаньоныКонстанты с constОбъектные выраженияПовторение — билетная касса6Полиморфизм
Динамическая диспетчеризацияПроверка типов и умные приведения типовwhen с типамиФункции-расширенияПовторение — смотритель зоопарка9Паттерны проектирования. Часть 1
Паттерн «Одиночка»Фабричный паттернПаттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Песочница Kotlin