Déclarations d’objets
Fait partie de la section Programmation orientée objet du Journey Kotlin de Coddy. Leçon 12 sur 57.
object Name { ... } déclare une classe et son unique instance en une seule étape. Vous utilisez l’objet par son nom : il n’y a aucun constructeur à appeler :
object AppConfig {
var theme = "light"
val version = "1.4"
fun describe() = "v$version, $theme theme"
}À l’intérieur de main :
println(AppConfig.describe())
AppConfig.theme = "dark"
println(AppConfig.describe())Sortie :
v1.4, light theme
v1.4, dark themeIl existe exactement une instance, donc chaque partie du programme qui utilise l’objet lit et modifie le même état. L’objet est créé la première fois qu’il est utilisé, comme le montre le bloc init ci-dessous :
object Visits {
var count = 0
private set
init { println("Visits created") }
fun record() { count++ }
}
fun home() = Visits.record()
fun about() { Visits.record(); Visits.record() }À l’intérieur de main :
println("start")
home()
about()
println(Visits.count)Sortie :
start
Visits created
3Un objet n’a pas de constructeur, car personne ne le crée. Ses propriétés obtiennent leurs valeurs dans leurs déclarations ou dans init. À part cela, il s’agit d’un corps de classe normal : état privé, fonctions d’aide privées et méthodes publiques :
object IdGenerator {
private var next = 1
fun newId(prefix: String) = "$prefix-${pad(next++)}"
private fun pad(n: Int) = n.toString().padStart(3, '0')
}Dans main :
println(IdGenerator.newId("user"))
println(IdGenerator.newId("order"))Sortie :
user-001
order-002Utilisez un objet pour quelque chose dont il n’existe qu’un seul exemplaire dans un programme : un registre, la configuration ou un groupe de fonctions utilitaires. Un objet constitue un état global que n’importe quel fichier peut modifier ; gardez donc ses accesseurs privés et laissez ses méthodes vérifier chaque modification.
object Units {
fun kmToMiles(km: Double) = km * 0.621371
}
Units.kmToMiles(10.0) // appelé via le nom
// val u = Units() // erreur : un objet n'a pas de constructeurDéfi
FacileComplétez l’objet Leaderboard. Il conserve les points de chaque joueur dans une map privée. add(player, points) ajoute des points, top() renvoie le leader sous la forme ada 6 (en cas d’égalité, le nom qui vient en premier dans l’ordre alphabétique) ou empty lorsque personne n’a de points, reset() supprime tout le monde, et la propriété players correspond au nombre de joueurs.
Les fonctions auxiliaires recordWin et recordDraw dans Functions.kt sont fournies : elles utilisent Leaderboard depuis un autre fichier. Le code fourni lit les commandes win ada, draw ada bo, top ou reset, affiche top() pour chaque commande top, puis affiche finalement players: avec le nombre de joueurs.
Votre code doit se trouver dans Leaderboard.kt et Functions.kt. Main.kt contient le code fourni pour les entrées et sorties et ne peut pas être modifié.
Essayez vous-même
fun main() {
// Code d'entrée/sortie fourni : le garder tel quel
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}")
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation orientée objet
1Classes et objets
Travailler avec des fichiersDéfinir des classesConstructeurs primairesBlocs init et validationConstructeurs secondairesRécapitulatif - Carte de bibliothèque4Héritage
Classes ouvertes et sous-classesRedéfinition des membressuper et constructeursClasses abstraitesRécapitulatif – Annuaire du personnel2Propriétés et encapsulation
Accesseurs personnalisésModificateurs de visibilitéSetters privéslazy et lateinitRécapitulatif - Compte bancaire5Interfaces
Déclarer des interfacesMéthodes par défautInterfaces multiplesInterfaces en tant que typesRécapitulatif - Méthodes de paiement8Génériques
Fonctions génériquesClasses génériquesContraintes de typeVariance avec in et outRécapitulatif - File de priorité11Projet : Gestion de bibliothèque
Livres et membresEmprunter des livres3Objets et compagnons
Déclarations d’objetsObjets compagnonsConstantes avec constExpressions d’objetsRécapitulatif – BilletterieEntraînez-vous par vous-même : Playground Kotlin