Les propriétés les getters et les setters dans kotlin


Dans ce tutoriel sur les propriétés dans kotlin,vous allez découvrir comment déclarer des propriétés dans une classe puis comment ajouter des getters et des setters à ces propriétés .

Si c’est votre premier tutoriel sur les classes dans kotlin, vous pouvez cliquer sur ce lien pour démarrer avec les classes et les objets dans kotlin

Table des matières

Déclarer des propriétés

Dans une classe kotlin,vous pouvez déclarer des propriétés comme propriété immuable avec le mot clé val ou comme propriété mutable avec le mot clé var comme suit.

class Voiture{
  var nom: String = "TOYOTA Camery" 
  var marque: String = "TOYOTA"
  var year: Int = 2007
     
 }

Voici un exemple qui illustre comment créer une instance de la classe Voiture et accéder aux propriétés.

 val voiture = Voiture()
// Récupération des propriétés de la classe Voiture
 val nom =voiture.nom
 val marque =voiture.marque

//Définition de la propriété de la classe Voiture
 voiture.nom = "TOYOTA Corolla"

Les getters et les setters dans kotlin

En Java dès que vous créer une classe , vous pouvez ajoutez des propriétés, ensuite définir des getters et setters pour récupérer et définir les propriétés de cette classe comme suit.

class Personne{
 private String nom;
 private String prenom;

 public Personne() {
 }

 public Personne(String nom, String prenom) {
  this.nom = nom;
  this.prenom = prenom;
 }

 public String getNom() {
  return nom;
 }

 public String getPrenom() {
  return prenom;
 }

 public void setNom(String nom) {
  this.nom = nom;
 }

 public void setPrenom(String prenom) {
  this.prenom = prenom;
 }
}

Voici ensuite comment récupérer ou modifier une propriété avec un getter ou setter

Personne personne=new Personne("VIGAN","JOEL");
  //Récupération du nom de la personne avec un getter
  String nom=personne.getNom();
  //Définition du prénom de la personne avec un setter
  personne.setNom("Noé");

Par contre, Kotlin génère par défaut en interne les getters et les setters pour les propriétés mutables (déclarer avec le mot clé var )et génère uniquement les getters pour les propriétés immuables (déclarer avec le mot clé val).

Donc par défaut dès que vous créez un objet et vous récupérez ou modifiez à ses propriétés, Kotlin appelle les getters et les setters de ses propriétés qui ont été généré en interne comme suit

Personne personne=new Personne("VIGAN","JOEL");
  //Appelle du getter en interne de la propriété nom pour récupérer le nom
  String nom=personne.getNom();
  //Appelle du settter en interne de la propriété prenom pour définir le prenom
  personne.setNom("Noé");

Voici la syntaxe pour déclarer une propriété dans kotlin

var <propertyName>[: <PropertyType>] [= <property_initializer>]
    [<getter>]
    [<setter>]

Donc de manière concrète voici comment se représente le classe Personne avec les getters et setters qui sont généré par défaut par kotlin.

class Voiture{
  var nom: String = "TOYOTA Camery"
  get() = field
  set(value) {
   field = value
  }
  val marque: String = "TOYOTA"
  get() = field

  var year: Int = 2007
  get() = field
  set(value) {
   field=value
  }

 }

Nous devez noter plusieurs choses sur les getters et les setters des propriétés

Observation 1: Backing Fields(field) ou champ auto généré : l’identificateur field ou backing field présent dans les méthodes get et set de la classe Voiture est un champs auto généré pour chaque propriété et il peut uniquement être utilisé pour accéder ou modifier la valeur d’une propriété dans les getters et setters.

Vous pouvez donc faire référence a ce champ auto généré ou backing field dans les getters et setters avec l’identificateur field comme dans l’exemple précédent

Vous ne pouvez pas directement utiliser une propriété dans le getters ou le set setter comme suit

class Voiture{
  var nom: String = "TOYOTA Camery"
  get() = nom //appelle recursive du getter de la propriété nom
  set(value) {
   nom = value //appelle recursive du setter de la propriété nom
  }
 }
fun main(){
 val voiture = Voiture()
 val nom =voiture.nom //StackOverflowError  

}

Ce exemple générera l’erreur StackOverflowError puisque vous essayer d’accéder ou de définir la valeur de la propriété nom dans le getter et setter avec la propriété nom elle meme.

Vous devez toujours utiliser l’identificateur spécial field auto généré pour accéder ou définir la valeur d’une propriété dans les getter et setters.

Vous devez aussi constater que dans l’exemple précédent vous ne pouvez pas initialiser les propriétés puisque aucun backing field n’est généré.

Le backing field (le champ field) est généré si :

1-La classe redéfini l’implémentation par défaut des getters et setters des propriétés de la classe comme dans le cas suivant

class Voiture{
  var nom: String = "TOYOTA Camery"
  get() = field //getter par défaut de la propriété
  set(value) { // setter par défaut de la propriété
   field = value
  }
 

 }

2-Ou bien si vous définissez un getter et un setter personnalisé pour chaque propriété et vous accéder à chaque propriété dans les getters et setters avec l’identificateur spécial field.

 class Voiture{
  var nom: String = "TOYOTA Camery"
  get() = field.toUpperCase() //Getter personnalisé
  set(value) {
   field = value
  }
 }

Observation 2:Vous devez constater l’utilisation d’un autre identificateur spécial nommé value, utilisé pour représenter la valeur qui serra passer dans le setter de la propriété.Il s’agit d’une convention dans kotlin de nommé cette valeur value. Mais vous pouvez la nommer comme bon vous semble

Observation 3:Vous devez toujours placez les getters et setters de chaque propriété directement après chaque propriété comme dans l’exemple suivant

Voici un autre exemple

class Figure{
  var type: String = "cercle" // propriété et après
  get() = field //getter 
  set(value) { //setter
   field = value
  }
  var valueX: Int =20 // propriété et après
   get() = field //getter 
   set(value) { //setter
    field = value
   }

  var yalueY: Int =20 // propriété et après
   get() = field  //getter 
   set(value) { //setter
    field = value
   }
 }

fun main(){
 val cercle= Figure()
 val type: String = cercle.type
 val x: Int = cercle.valueX
 print("La figure est un $type de valeur x égal à: $x")

}

Résultat:La figure est un cercle de valeur x égal à: 20

Getter et setter personnalisés

Kotlin vous permet de définir des getters et setters personnalisés pour les propriétés des classes.

Voici un exemple qui vous montre comment déclarer des getters et setters personnalisé.

fun main(){
  val personne = Personne()
  val nom: String = personne.nom
  println("Le nom de la personne est $nom")
}

 class Personne{
  var nom: String = "VIGAN" 
  get() = field.toLowerCase() 
  set(value) { //setter
   field = value.toLowerCase()
  }
  
 }

Résultat: Le nom de la personne est vigan

Conclusion

Voila,nous sommes à la fin de ce tutoriel dans lequel vous avez appris à déclarer des getters et setters.J’espère que ce tutoriel vous aidera.A bientôt pour un nouveau tutoriel.

Autres ressources

https://kotlinlang.org/docs/reference/properties.html


Laisser un commentaire

Résoudre : *
17 + 20 =


%d