Classiquement une propriété de classe est une variable. On peut écrire dedans et lire son contenu.
Une propriété calculée est un cas particulier où l’information n’est pas stockée en mémoire, mais calculée par le code au moment de la lecture.
D’après ce que je vois, ton exemple vient d’un jeu vidéo. La classe Person sert à gérer les points de vie d’un personnage.
La propriété isAlive est une information booléenne (ne pouvant avoir que deux valeurs vrai ou faux). Elle permet de savoir si un personnage est vivant ou mort, avec un test simple : s’il lui reste des points de vie, il est vivant.
Je présume qu’il doit y avoir quelque part dans le code, une fonction diminuant le nombre de points de vie, à chaque coups reçu par le personnage.
L’instruction get() indique au compilateur que isAlive n’est pas une vraie variable à stocker en mémoire, mais qu’il faut la calculer a chaque appel.
Personnellement, je n’aurais pas utilisé de propriété calculée si j’avais eu à écrire ce code, mais une vraie variable binaire. Quelque chose comme :
class Person {
var health:Int = 100
val isAlive:Boolean = true
fun setAlive() {
health = 100
isAlive = true
}
fun recevoirDegats(degats:Int) {
health = health - degats
if health > 0 {
isAlive = true
} else {
isAlive = false
}
}
}
Je ne garantis pas que le code fonctionne. Je n’ai pas testé, et a vrai dire n’ayant pas pratiqué Kotlin depuis longtemps, il est possible que je soit influencé par la syntaxe de Swift. Mais le principe est là.
L’avantage des propriétés calculés, c’est qu’elles permettent de faire des calculs uniquement quand c’est nécessaire. Pour mon exemple, j’ai du précalculer le résultat et le stocker en mémoire.
Techniquement parlant, la solution d’Anthony est meilleure que la mienne. Créer une fonction dans la classe pour savoir si un personnage est vivant ou non est plus simple que gérer une variable interne, notamment à cause des problèmes d’initialisation.
Cependant l’utilisation d’une fonction pour obtenir une information auprès d’une classe n’est pas très esthétique.
// Utilisation d'une fonction
etatPerso = perso3.isAlive()
Il est plus simple et lisible d’utiliser une propriété, comme ceci :
// Utilisation d'une propriété
etatPerso = perso3.isAlive
C’est pourquoi les langages de programmation modernes intègrent la notion de propriétés calculées, pour rendre le code plus facile à lire. On peut s’en passer, mais c’est agréable à l’usage.