Deklaracje obiektów
Część sekcji Programowanie obiektowe ścieżki Kotlin w Coddy. Lekcja 12 z 57.
object Name { ... } deklaruje klasę i jej jedyną instancję w jednym kroku. Używasz obiektu, odwołując się do jego nazwy; nie trzeba wywoływać konstruktora:
object AppConfig {
var theme = "light"
val version = "1.4"
fun describe() = "v$version, $theme theme"
}Wewnątrz main:
println(AppConfig.describe())
AppConfig.theme = "dark"
println(AppConfig.describe())Wynik:
v1.4, light theme
v1.4, dark themeIstnieje dokładnie jedna instancja, więc każda część programu, która używa obiektu, odczytuje i zmienia ten sam stan. Obiekt jest tworzony przy pierwszym użyciu, co pokazuje poniższy blok init:
object Visits {
var count = 0
private set
init { println("Visits created") }
fun record() { count++ }
}
fun home() = Visits.record()
fun about() { Visits.record(); Visits.record() }Wewnątrz main:
println("start")
home()
about()
println(Visits.count)Wynik:
start
Visits created
3Obiekt nie ma konstruktora, ponieważ nikt go nie tworzy. Jego właściwości otrzymują wartości w deklaracjach lub w init. Poza tym jest to zwykłe ciało klasy: stan prywatny, prywatne funkcje pomocnicze i metody publiczne:
object IdGenerator {
private var next = 1
fun newId(prefix: String) = "$prefix-${pad(next++)}"
private fun pad(n: Int) = n.toString().padStart(3, '0')
}Wewnątrz main:
println(IdGenerator.newId("user"))
println(IdGenerator.newId("order"))Wynik:
user-001
order-002Używaj obiektu dla czegoś, czego w programie jest dokładnie jedno: rejestru, konfiguracji, grupy funkcji pomocniczych. Obiekt to stan globalny, który może zmienić dowolny plik, więc jego settery powinny być prywatne, a jego metody powinny sprawdzać każdą zmianę.
object Units {
fun kmToMiles(km: Double) = km * 0.621371
}
Units.kmToMiles(10.0) // wywołane przez nazwę
// val u = Units() // błąd: obiekt nie ma konstruktoraWyzwanie
ŁatwyUzupełnij obiekt Leaderboard. Przechowuje on punkty każdego gracza w prywatnej mapie. add(player, points) dodaje punkty, top() zwraca lidera jako ada 6 (przy równej liczbie punktów wygrywa nazwa, która jest pierwsza alfabetycznie) albo empty, gdy nikt nie ma punktów, reset() usuwa wszystkich, a właściwość players przechowuje liczbę graczy.
Funkcje pomocnicze recordWin i recordDraw w pliku Functions.kt są dostarczone: korzystają z obiektu Leaderboard z innego pliku. Dostarczony kod odczytuje polecenia win ada, draw ada bo, top lub reset, wypisuje wynik top() dla każdego polecenia top, a na końcu players: wraz z liczbą graczy.
Umieść swój kod w plikach Leaderboard.kt i Functions.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()
for (cmd in input) {
val p = cmd.split(" ")
when (p[0]) {
"win" -> recordWin(p[1])
"draw" -> recordDraw(p[1], p[2])
"reset" -> Leaderboard.reset()
else -> println(Leaderboard.top())
}
}
println("players: ${Leaderboard.players}")
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
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ążek3Obiekty i obiekty towarzyszące
Deklaracje obiektówObiekty towarzysząceStałe z constWyrażenia obiektowePowtórzenie — kasa biletowaPoćwicz samodzielnie: Edytor online Kotlin