Une propriété calculée est une propriété dont la valeur s’obtient après l’évaluation d’une expression
L’accesseur sur une propriété, permet de toujours évaluer la valeur de la propriété, avant de retourner la réponse. Il est très important pour les propriétés calculées.
Si l’accesseur n’est pas ajouté à une propriété calculée, alors l’expression de cette propriété sera évaluée uniquement lors de la création de l’objet et ne sera plus évaluée, ce qui peut souvent causer des comportements inattendus.
Soit la classe
class User(var age: Int) {
val isAdult: Boolean = age >= 18
}
Et considérons notre méthode main suivante pour tester :
fun main() {
val user = User(14)
println("User with age: ${user.age} is an adult? ${user.isAdult}")
user.age = 20
println("User with age: ${user.age} is an adult? ${user.isAdult}")
}
Le résultat est :
User with age: 14 is an adult? false
User with age: 20 is an adult? false
La valeur de isAdult
a été évaluée uniquement lors de la création de l’objet user
et est restée inchangée, même après la mise à jour de la propriété age
. Ce n’est pas le comportement que nous attendions.
Si on ajoute un accesseur à la propriété isAdult
class User(var age: Int) {
val isAdult: Boolean
get() = age >= 18
}
Alors, on obtient le bon résultat 👍
User with age: 14 is an adult? false
User with age: 20 is an adult? true
Dans certains cas, on n’a pas toujours besoin d’évaluer l’expression de la propriété calculée à chaque fois qu’on l’appelle.
Par exemple :
class User(val age: Int) {
val isAdult: Boolean
get() = age >= 18
}
Dans le cas ci-dessus, la propriété age
est immuable, pas d’intérêt d’évaluer l’expression de la propriété isAdult
chaque fois que je l’appelle, car sa valeur ne changera pas.
Donc je peux tout simplement avoir
class User(val age: Int) {
val isAdult: Boolean = age >= 18
}
Nous venons de voir que l’accesseur sur une propriété peut être inutile dans certains cas, surtout lorsque son expression dépend entièrement des propriétés immuables. Toutefois, je recommande comme bonne pratique de toujours garder l’accesseur sur ces propriétés afin d’éviter une surprise due au fait qu’une propriété est devenue muable ou tout changement similaire.
😎 ✌️