Objektdeklarationen
Teil des Abschnitts Objektorientierte Programmierung der Kotlin-Journey von Coddy. Lektion 12 von 57.
object Name { ... } deklariert eine Klasse und ihre einzige Instanz in einem Schritt. Du verwendest das Objekt über seinen Namen; es gibt keinen Konstruktor, den du aufrufen musst:
object AppConfig {
var theme = "light"
val version = "1.4"
fun describe() = "v$version, $theme theme"
}Innerhalb von main:
println(AppConfig.describe())
AppConfig.theme = "dark"
println(AppConfig.describe())Ausgabe:
v1.4, light theme
v1.4, dark themeEs gibt genau eine Instanz, daher liest und ändert jeder Teil des Programms, der das Objekt verwendet, denselben Zustand. Das Objekt wird bei seiner ersten Verwendung erstellt, wie der folgende init-Block zeigt:
object Visits {
var count = 0
private set
init { println("Visits created") }
fun record() { count++ }
}
fun home() = Visits.record()
fun about() { Visits.record(); Visits.record() }Innerhalb von main:
println("start")
home()
about()
println(Visits.count)Ausgabe:
start
Visits created
3Ein Objekt hat keinen Konstruktor, weil es niemand erstellt. Seine Eigenschaften erhalten ihre Werte in ihren Deklarationen oder in init. Abgesehen davon ist es ein normaler Klassenrumpf: privater Zustand, private Hilfsfunktionen und öffentliche Methoden:
object IdGenerator {
private var next = 1
fun newId(prefix: String) = "$prefix-${pad(next++)}"
private fun pad(n: Int) = n.toString().padStart(3, '0')
}Innerhalb von main:
println(IdGenerator.newId("user"))
println(IdGenerator.newId("order"))Ausgabe:
user-001
order-002Verwende ein Objekt für etwas, von dem es in einem Programm genau eines gibt: eine Registry, die Konfiguration oder eine Gruppe von Hilfsfunktionen. Ein Objekt ist ein globaler Zustand, den jede Datei ändern kann. Halte seine Setter daher privat und lass seine Methoden jede Änderung prüfen.
object Units {
fun kmToMiles(km: Double) = km * 0.621371
}
Units.kmToMiles(10.0) // über den Namen aufgerufen
// val u = Units() // Fehler: Ein Objekt hat keinen KonstruktorAufgabe
EinfachVervollständige das Objekt Leaderboard. Es speichert die Punkte jedes Spielers in einer privaten Map. add(player, points) fügt Punkte hinzu, top() gibt den Spitzenreiter als ada 6 zurück (bei gleicher Punktzahl den Namen, der alphabetisch zuerst kommt) oder empty, wenn niemand Punkte hat, reset() entfernt alle Spieler, und die Eigenschaft players gibt die Anzahl der Spieler an.
Die Hilfsfunktionen recordWin und recordDraw in Functions.kt werden bereitgestellt: Sie verwenden Leaderboard aus einer anderen Datei. Der bereitgestellte Code liest die Befehle win ada, draw ada bo, top oder reset, gibt für jedes top den Wert von top() aus und schließlich players: mit der Anzahl.
Dein Code gehört in Leaderboard.kt und Functions.kt. Main.kt enthält den bereitgestellten Ein-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
fun main() {
// Vorgegebener Ein-/Ausgabecode: unverändert lassen
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}")
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenPrimärkonstruktoreninit-Blöcke und ValidierungSekundärkonstruktorenRückblick – Bibliotheksausweis4Vererbung
Offene Klassen und UnterklassenÜberschreiben von Membernsuper und KonstruktorenAbstrakte KlassenRückblick – Mitarbeiterverzeichnis2Eigenschaften und Kapselung
Benutzerdefinierte ZugriffsmethodenSichtbarkeitsmodifikatorenPrivate Setterlazy und lateinitWiederholung – Bankkonto5Schnittstellen
Schnittstellen deklarierenStandardmethodenMehrere SchnittstellenSchnittstellen als TypenRückblick – Zahlungsmethoden8Generics
Generische FunktionenGenerische KlassenTypbeschränkungenVarianz mit in und outRückblick – Prioritätswarteschlange11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihen3Objekte und Companion-Objekte
ObjektdeklarationenCompanion-ObjekteKonstanten mit constObjektausdrückeRückblick – FahrkartenschalterÜbe selbstständig: Kotlin-Playground