Menu
Coddy logo textTech

Constructeurs primaires

Fait partie de la section Programmation orientée objet du Journey Kotlin de Coddy. Leçon 3 sur 57.

La plupart des classes Kotlin prennent leurs valeurs initiales dans un constructeur primaire, écrit entre parenthèses après le nom de la classe. val ou var placé devant un paramètre en fait simultanément une propriété :

class Book(val title: String, var pages: Int)

À l'intérieur de main :

val book = Book("Dune", 412)
println(book.title)
book.pages += 8
println(book.pages)

Sortie :

Dune
420

Un paramètre sans val ni var est disponible uniquement lors de la création de l’instance, par exemple pour calculer une propriété. Les propriétés val ne peuvent pas être réaffectées après la création : les propriétés var le peuvent :

class Temperature(celsius: Double) {
    val fahrenheit = celsius * 9 / 5 + 32
}

Dans main :

val t = Temperature(100.0)
println(t.fahrenheit)

Sortie :

212.0

Les paramètres du constructeur peuvent avoir des valeurs par défaut et être transmis par nom, ainsi un seul constructeur couvre de nombreuses façons de créer une instance :

class Timer(val seconds: Int, val label: String = "timer")

À l’intérieur de main :

val egg = Timer(300, "egg")
val quick = Timer(30)
val named = Timer(label = "tea", seconds = 180)
println("${egg.label} ${egg.seconds}")
println("${quick.label} ${quick.seconds}")
println("${named.label} ${named.seconds}")

Sortie :

egg 300
timer 30
tea 180

À l’intérieur du corps de la classe, this fait référence à l’instance actuelle. Il est nécessaire lorsqu’un paramètre de méthode porte le même nom qu’une propriété :

class Player(var name: String) {
    fun rename(name: String) {
        this.name = name
    }
}

À l’intérieur de main :

val p = Player("anon")
p.rename("Ada")
println(p.name)

Sortie :

Ada
challenge icon

Défi

Facile

Déclarez la classe Account avec un constructeur primaire : un owner en lecture seule et un balance modifiable dont la valeur par défaut est 0. Ajoutez summary(), qui renvoie Ada has 150.

Le code fourni lit un propriétaire et, lorsqu’une deuxième ligne est présente, un solde initial. Il crée le compte avec ou sans le solde, puis affiche summary().

Votre code doit être placé dans Account.kt. Main.kt contient le code fourni pour l’entrée et la sortie 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()
    val account = if (input.size > 1) Account(input[0], input[1].toInt()) else Account(input[0])
    println(account.summary())
}
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Playground Kotlin