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 beim ersten Zugriff 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 niemand es erstellt. Seine Eigenschaften erhalten ihre Werte in ihren Deklarationen oder in init. Abgesehen davon handelt es sich um einen normalen Klassenkörper: 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 Registrierung, die Konfiguration oder eine Gruppe von Hilfsfunktionen. Ein Objekt ist ein globaler Zustand, den jede Datei ändern kann. Halte daher seine Setter privat und lasse seine Methoden jede Änderung überprü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 der Name, der alphabetisch zuerst kommt) oder empty, wenn niemand Punkte hat, reset() entfernt alle, und die Eigenschaft players ist die Anzahl der Spieler.
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 top() aus und schließlich players: mit der Anzahl aus.
Dein Code gehört in Leaderboard.kt und Functions.kt. Main.kt enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
fun main() {
// Bereitgestellter Ein-/Ausgabe-Code: belasse ihn wie er ist
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