Dichiarazioni di oggetti
Fa parte della sezione Programmazione orientata agli oggetti del percorso Kotlin di Coddy. Lezione 12 di 57.
object Name { ... } dichiara una classe e la sua unica istanza in un solo passaggio. Usi l'oggetto tramite il suo nome; non c'è un costruttore da chiamare:
object AppConfig {
var theme = "light"
val version = "1.4"
fun describe() = "v$version, $theme theme"
}All'interno di main:
println(AppConfig.describe())
AppConfig.theme = "dark"
println(AppConfig.describe())Output:
v1.4, light theme
v1.4, dark themeEsiste esattamente un'unica istanza, quindi ogni parte del programma che usa l'oggetto legge e modifica lo stesso stato. L'oggetto viene creato la prima volta che viene usato, come mostra il blocco init qui sotto:
object Visits {
var count = 0
private set
init { println("Visits created") }
fun record() { count++ }
}
fun home() = Visits.record()
fun about() { Visits.record(); Visits.record() }All'interno di main:
println("start")
home()
about()
println(Visits.count)Output:
start
Visits created
3Un oggetto non ha un costruttore, perché nessuno lo crea. Le sue proprietà ricevono i valori nelle dichiarazioni o in init. A parte questo, è un normale corpo di classe: stato privato, funzioni di supporto private e metodi pubblici:
object IdGenerator {
private var next = 1
fun newId(prefix: String) = "$prefix-${pad(next++)}"
private fun pad(n: Int) = n.toString().padStart(3, '0')
}All'interno di main:
println(IdGenerator.newId("user"))
println(IdGenerator.newId("order"))Output:
user-001
order-002Usa un oggetto per qualcosa di cui esiste esattamente un esemplare in un programma: un registro, la configurazione, un gruppo di funzioni di supporto. Un oggetto è uno stato globale che qualsiasi file può modificare, quindi mantieni privati i suoi metodi setter e lascia che siano i suoi metodi a controllare ogni modifica.
object Units {
fun kmToMiles(km: Double) = km * 0.621371
}
Units.kmToMiles(10.0) // chiamato tramite il nome
// val u = Units() // errore: un oggetto non ha un costruttoreSfida
FacileCompleta l'oggetto Leaderboard. Mantiene i punti di ogni giocatore in una mappa privata. add(player, points) aggiunge punti, top() restituisce il leader come ada 6 (a parità di punti, il nome che viene prima in ordine alfabetico) oppure empty quando nessuno ha punti, reset() rimuove tutti e la proprietà players indica il numero di giocatori.
Le funzioni helper recordWin e recordDraw in Functions.kt sono fornite: usano Leaderboard da un altro file. Il codice fornito legge i comandi win ada, draw ada bo, top o reset, stampa top() per ogni top e infine players: seguito dal conteggio.
Il tuo codice va inserito in Leaderboard.kt e Functions.kt. Main.kt contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
fun main() {
// Codice di input/output fornito: lascialo così com'è
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}")
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Classi e oggetti
Lavorare con i fileDefinire le classiCostruttori primariBlocchi init e convalidaCostruttori secondariRiepilogo - Tessera della biblioteca4Ereditarietà
Classi aperte e sottoclassiRidefinizione dei membrisuper e costruttoriClassi astratteRiepilogo - Elenco del personale2Proprietà e incapsulamento
Accessor personalizzatiModificatori di visibilitàSetter privatilazy e lateinitRipasso - Conto bancario5Interfacce
Dichiarare le interfacceMetodi predefinitiInterfacce multipleLe interfacce come tipiRiepilogo - Metodi di pagamento8Tipi generici
Funzioni genericheClassi genericheVincoli sui tipiVarianza con in e outRiepilogo - Coda con priorità11Progetto: Gestione della biblioteca
Libri e sociPrendere in prestito i libri3Oggetti e companion
Dichiarazioni di oggettiOggetti companionCostanti con constEspressioni oggettoRipasso - BiglietteriaEsercitati da solo: Playground Kotlin