Podsumowanie — karta biblioteczna
Część sekcji Programowanie obiektowe ścieżki Kotlin w Coddy. Lekcja 6 z 57.
Wyzwanie
ŚredniZadeklaruj klasę LibraryCard(val name: String, val limit: Int = 3). Jej blok init wymaga niepustej nazwy, która nie składa się wyłącznie z białych znaków (name is empty), oraz limitu wynoszącego co najmniej 1 (limit must be positive). Klasa przechowuje listę wypożyczonych tytułów. borrow(title) zwraca true i dodaje tytuł, chyba że karta osiągnęła limit lub ma już ten tytuł. giveBack(title) zwraca true, gdy usunęła tytuł. status() zwraca Ada: 2/3 (Dune, Emma) w kolejności wypożyczenia albo Ada: 0/3, gdy nic nie jest wypożyczone.
Dostarczony kod odczytuje nazwę, limit (lub pusty wiersz, aby użyć wartości domyślnej), a następnie polecenia +title lub -title. Dla każdego polecenia wypisuje ok lub no, a na końcu status(); w przypadku nieprawidłowej karty wypisuje komunikat o błędzie.
Umieść swój kod w pliku LibraryCard.kt. Main.kt zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
fun main() {
// Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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)
}
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasKonstruktory główneBloki init i walidacjaKonstruktory dodatkowePodsumowanie — karta biblioteczna4Dziedziczenie
Klasy otwarte i podklasyNadpisywanie składowychsuper i konstruktoryKlasy abstrakcyjnePodsumowanie – katalog pracowników7Klasy specjalne
Klasy danychKlasy wyliczenioweHierarchie zapieczętowaneequals, hashCode, toStringPodsumowanie — śledzenie zamówień10Wzorce projektowe, część 2
Delegowanie za pomocą byWzorzec dekoratoraWzorzec budowniczegoWzorzec stanu2Właściwości i hermetyzacja
Własne akcesoryModyfikatory widocznościPrywatne setterylazy i lateinitPowtórka – konto bankowe5Interfejsy
Deklarowanie interfejsówMetody domyślneWiele interfejsówInterfejsy jako typyPowtórzenie – metody płatności8Typy generyczne
Funkcje generyczneKlasy generyczneOgraniczenia typówKowariancja i kontrawariancja: in i outPodsumowanie — kolejka priorytetowa11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Edytor online Kotlin