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
Noe Joel Vigan, auteur de ce blog, est passionné par la programmation Android. Il a créé ce blog pour partager ses connaissances sur le développement d’application android. Il est Développeur Android Fullstack, ce qui lui permet de complètement mettre en place le Backend de ses applications sur Google Cloud à défaut d’utiliser FireBase.