Les Getters et Setters en JavaScript

Getters et Setters en JavaScript (Get et Set)

getters setters javascript get set image

 

Introduction aux Getters et Setters

 
 

En JavaScript, les getters et setters sont des méthodes spéciales qui permettent d’accéder et de manipuler les propriétés d’un objet de manière contrôlée.

 

Ces méthodes sont particulièrement utiles pour encapsuler la logique d’accès aux données, offrant ainsi un moyen propre et sécurisé de gérer les propriétés des objets.

 

Qu’est-ce qu’un Getter ?

 

Un getter est une méthode utilisée pour obtenir la valeur d’une propriété. Il agit comme un intermédiaire, permettant d’ajouter une logique supplémentaire lors de la lecture d’une propriété.

L’utilisation des getters peut simplifier le code et améliorer la lisibilité.

 

 

class Person {
  constructor(name) {
    this._name = name;
  }

  get name() {
    return this._name.toUpperCase();
  }
}

const person = new Person('Carmen');
console.log(person.name); // CARMEN

 
 

Dans cet exemple, le getter name renvoie la valeur de _name en majuscules. Cela permet de centraliser la transformation et d’assurer une sortie cohérente.

 

Qu’est-ce qu’un Setter ?

 

Un setter est une méthode utilisée pour définir la valeur d’une propriété. Il permet d’enfermer la logique de validation ou de transformation des données avant de les attribuer à une propriété.

 

Les setters sont essentiels pour contrôler la manière dont les propriétés d’un objet sont modifiées.

 
 

class Person {
  constructor(name) {
    this._name = name;
  }

  get name() {
    return this._name.toUpperCase();
  }

  set name(newName) {
    if (newName.length > 0) {
      this._name = newName;
    } else {
      console.log('Invalid name');
    }
  }
}

const person = new Person('arnold');
person.name = 'willy';
console.log(person.name); // WILLY
person.name = ''; // Invalid name

 
 Ici, le setter name vérifie si le nouveau nom est valide avant de l’assigner à la propriété _name. Cela garantit que la propriété ne contient que des valeurs valides.
 
 
 

Quand Utiliser les Getters en JavaScript ?

 
 

Les getters en JavaScript ne sont pas uniquement des outils pratiques pour accéder aux propriétés d’un objet, ils offrent également une flexibilité et un contrôle supplémentaires qui peuvent grandement améliorer la qualité de votre code.

 

Voici quelques situations dans lesquelles l’utilisation de getters est particulièrement utile :

 

1. Lecture de Propriétés Calculées

 

Lorsque la valeur d’une propriété dépend d’autres propriétés ou nécessite un calcul, un getter est idéal.

Cela vous permet de calculer la valeur à la volée, sans avoir à stocker la donnée de manière redondante.

 
 
 

class Rectangle {
  constructor(width, height) {
    this.width = width;
    this.height = height;
  }

  get area() {
    return this.width * this.height;
  }
}

const rect = new Rectangle(10, 5);
console.log(rect.area); // 50

 
 

Dans cet exemple, la propriété area est calculée dynamiquement en fonction de width et height. Il n’est donc pas nécessaire de stocker cette valeur séparément, ce qui évite les incohérences dans le code.

 

2. Contrôle d’Accès aux Propriétés

 

Les getters peuvent être utilisés pour contrôler l’accès aux propriétés sensibles ou pour masquer la complexité interne d’un objet.

 

En utilisant un getter, vous pouvez restreindre la manière dont une propriété est exposée à l’extérieur de l’objet.

 
 
 
class BankAccount {
  constructor(balance) {
    this._balance = balance;
  }

  get balance() {
    return this._balance.toFixed(2);
  }
}

const account = new BankAccount(1500.5);
console.log(account.balance); // 1500.50

 
 

Ici, le getter balance formate la valeur pour garantir qu’elle est toujours affichée avec deux décimales, ce qui permet d’offrir une interface utilisateur cohérente.

 

3. Encapsulation de la Logique

 

Utiliser un getter est une bonne pratique pour encapsuler la logique d’accès à une propriété, surtout si cette logique peut évoluer avec le temps.

Cela permet d’isoler le changement et de minimiser les impacts sur le reste du code.

 
 
 
class User {
  constructor(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }

  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  }
}

const user = new User('John', 'Doe');
console.log(user.fullName); // John Doe

 
 

Dans cet exemple, fullName combine firstName et lastName, offrant une interface propre et intuitive pour accéder au nom complet de l’utilisateur. Si la structure du nom change à l’avenir, il suffira de modifier le getter sans impacter le reste du code.

 

4. Validation et Nettoyage des Données

 
 

Même si les setters sont généralement utilisés pour la validation, les getters peuvent également jouer un rôle dans la validation ou le nettoyage des données lorsqu’elles sont lues.

 
 

 

 
class User {
  constructor(email) {
    this._email = email;
  }

  get email() {
    return this._email.trim().toLowerCase();
  }
}

const user = new User('   Example@DOMAIN.COM ');
console.log(user.email); // example@domain.com

 

Dans cet exemple, le getter email s’assure que l’adresse email est toujours en minuscule et sans espaces inutiles avant d’être renvoyée, ce qui garantit une utilisation cohérente et propre de la donnée.

 

Les cas d’utilisation de getter sont divers et variés

 

Les getters sont essentiels lorsque vous souhaitez offrir un accès contrôlé, sécurisé et propre aux propriétés d’un objet.

Ils permettent de masquer les détails d’implémentation, d’effectuer des calculs dynamiques, et d’assurer que les données sont présentées de manière cohérente et formatée. En comprenant quand et comment les utiliser, vous pouvez concevoir des objets JavaScript plus robustes et maintenables.

 

Maintenant Voyons Quels sont les Cas d’utilisation des Setters en JavaScript ?

 

Les setters en JavaScript enferme la logique de modification des propriétés d’un objet.

Ils permettent non seulement de contrôler l’affectation des valeurs, mais aussi d’ajouter des vérifications ou transformations avant que ces valeurs ne soient enregistrées. Voici quelques situations où les setters sont particulièrement utiles :

 

1. Validation des Données

L’un des cas les plus courants pour utiliser un setter est de valider les données avant qu’elles ne soient attribuées à une propriété. Cela permet de garantir que seules des valeurs valides sont enregistrées dans l’objet.

 

 
 
class User {
  constructor(age) {
    this._age = age;
  }

  set age(value) {
    if (value > 0 && Number.isInteger(value)) {
      this._age = value;
    } else {
      console.log('Invalid age');
    }
  }
}

const user = new User(25);
user.age = -5; // Invalid age
console.log(user._age); // 25

 
 

Dans cet exemple, le setter age vérifie que l’âge est un nombre entier positif avant de l’affecter. Si la validation échoue, l’âge n’est pas modifié, ce qui protège l’intégrité des données.

 

2. Encapsulation de la Logique de Modification

 

Les setters permettent de centraliser la logique de modification des propriétés. Au lieu de disperser des vérifications ou des transformations dans tout le code, vous pouvez les encapsuler dans un setter. Cela rend le code plus propre et plus facile à maintenir.

 
 
 
 
class Employee {
  constructor(name, salary) {
    this._name = name;
    this._salary = salary;
  }

  set salary(value) {
    if (value >= 30000) {
      this._salary = value;
    } else {
      console.log('Salary too low');
    }
  }
}

const employee = new Employee('Jane', 50000);
employee.salary = 25000; // Salary too low
console.log(employee._salary); // 50000

 

Le setter salary garantit que le salaire ne peut pas être inférieur à un certain seuil, ce qui centralise la règle de gestion dans une seule méthode.

 

3. Transformation Automatique des Données

 

Les setters peuvent être utilisés pour transformer automatiquement les données avant qu’elles ne soient stockées dans une propriété.

Cela peut inclure des opérations comme la conversion de types, la mise en forme ou d’autres ajustements nécessaires.

 

 
 
class Product {
  constructor(name, price) {
    this._name = name;
    this._price = price;
  }

  set price(value) {
    this._price = parseFloat(value).toFixed(2);
  }
}

const product = new Product('Laptop', '1000');
product.price = '1234.5';
console.log(product._price); // 1234.50

 
 
 Ici, le setter price convertit le prix en un nombre avec deux décimales, assurant que la valeur est toujours stockée dans un format standard.
 
 

4. Déclenchement d’Actions Additionnelles

 

Parfois, vous souhaitez que la modification d’une propriété déclenche d’autres actions, comme la mise à jour d’une interface utilisateur ou l’enregistrement de données dans une base.

Les setters offrent une façon propre de lier ces actions à des changements de propriété.

 
 
 
class Thermostat {
  constructor(temperature) {
    this._temperature = temperature;
  }

  set temperature(value) {
    this._temperature = value;
    this.updateDisplay();
  }

  updateDisplay() {
    console.log(`Current temperature: ${this._temperature}°C`);
  }
}

const thermostat = new Thermostat(22);
thermostat.temperature = 25; // Current temperature: 25°C

 
 

Dans cet exemple, à chaque fois que la température est modifiée via le setter temperature, l’affichage est automatiquement mis à jour en appelant la méthode updateDisplay.

 

5. Protection Contre les Modifications Directes

 
 

Enfin, les setters peuvent être utilisés pour protéger certaines propriétés contre les modifications directes, en appliquant des règles strictes ou en rendant certaines propriétés en lecture seule, sauf dans des conditions spécifiques.

 
 
 
class Account {
  constructor(balance) {
    this._balance = balance;
  }

  set balance(value) {
    console.log('Balance modification is not allowed directly.');
  }
}

const account = new Account(1000);
account.balance = 500; // Balance modification is not allowed directly.
console.log(account._balance); // 1000

 
 

Dans ce cas, le setter balance empêche toute modification directe de la propriété _balance, ce qui protège les données contre des changements non autorisés.

 

Les setters est leur utilisation sont diverses et variées et bien plus encore…

 
 

Les setters en JavaScript contrôle donc la façon dont les propriétés des objets sont modifiées à l’intérieur d’eux mêmes.

 Ils permettent d’ajouter de la validation, de la transformation, et même de déclencher des actions lorsque des propriétés changent.

En les utilisant correctement, vous pouvez améliorer la sécurité, la fiabilité et la maintenabilité de votre code.

 

 

Pourquoi Implémenter les Getters et Setters à l’Intérieur d’une Classe ?

 
 

Lorsqu’il s’agit de manipuler les propriétés d’un objet en JavaScript, il est souvent préférable d’implémenter les méthodes getter et setter directement à l’intérieur de la classe plutôt que d’utiliser des fonctions externes ou d’autres méthodes en dehors de la classe. Voici pourquoi :

 

 

1. Encapsulation et Cohésion

 

L’un des principaux objectifs de la programmation orientée objet (POO) est l’encapsulation, qui consiste à regrouper les données (propriétés) et les comportements (méthodes) qui les manipulent dans une même entité, la classe.

En définissant les getters et setters à l’intérieur de la classe, vous maintenez la cohésion de l’objet. Cela signifie que toutes les fonctionnalités liées à un objet spécifique sont regroupées, ce qui facilite la gestion et la maintenance du code.

 

 

 
 
 
class Car {
  constructor(brand, speed) {
    this._brand = brand;
    this._speed = speed;
  }

  get brand() {
    return this._brand;
  }

  set speed(value) {
    if (value > 0) {
      this._speed = value;
    }
  }
}

 
 

En encapsulant les getters et setters dans la classe Car, vous maintenez toutes les fonctionnalités relatives à une voiture dans une seule unité cohérente.

 

 

2. Protection des Données

 

Les getters et setters à l’intérieur de la classe permettent de contrôler directement l’accès et la modification des propriétés privées ou protégées de l’objet.

Cela protège les données contre des accès non autorisés ou des modifications inattendues, ce qui n’est pas possible avec des fonctions externes.

 

 

 
class BankAccount {
  constructor(balance) {
    this._balance = balance;
  }

  get balance() {
    return this._balance;
  }

  set balance(value) {
    if (value >= 0) {
      this._balance = value;
    }
  }
}

 
 

Ici, la propriété _balance est protégée, et seul le setter balance peut modifier sa valeur de manière contrôlée, empêchant les modifications accidentelles ou malveillantes.

 

 

3. Simplicité et Lisibilité du Code

 
 

En implémentant les getters et setters à l’intérieur de la classe, vous simplifiez le code en évitant la dispersion des responsabilités.

Toutes les manipulations des propriétés se font à l’intérieur de la classe, ce qui rend le code plus lisible et plus facile à comprendre pour d’autres développeurs ou pour vous-même lors de futures révisions.

 
 
 
 
 
class Rectangle {
  constructor(width, height) {
    this._width = width;
    this._height = height;
  }

  get area() {
    return this._width * this._height;
  }

  set width(value) {
    this._width = value;
  }
}

 
 

Dans cet exemple, toute la logique concernant les dimensions et l’aire du rectangle est contenue dans la classe Rectangle, rendant le code plus intuitif et plus facile à suivre.

 

 

4. Facilité de Maintenance

 
 

En regroupant les getters et setters avec la définition de la classe, vous facilitez la maintenance de votre code.

Si la logique d’accès ou de modification d’une propriété doit être modifiée, vous savez exactement où chercher : dans la classe elle-même.

Cette centralisation réduit les risques d’introduire des bugs lors de mises à jour.

 

 

5. Conformité aux Principes de la POO

 
 

L’utilisation de getters et setters à l’intérieur de la classe est conforme aux principes de la programmation orientée objet, notamment le principe d’encapsulation et celui du moindre étonnement (principle of least astonishment).

Cela permet de créer des objets qui gèrent leurs propres états, conformément aux meilleures pratiques de la POO.

 

 

6. Interopérabilité avec les Outils et Frameworks

 

De nombreux outils et frameworks JavaScript s’attendent à ce que les méthodes de manipulation des propriétés soient définies à l’intérieur de la classe.

Par exemple, les frameworks de gestion d’état ou de liaison de données (comme Vue.js) peuvent utiliser les getters et setters pour détecter les changements de propriété et mettre à jour automatiquement l’interface utilisateur.

Définir ces méthodes à l’intérieur de la classe garantit une meilleure compatibilité.

 

 

Les Getters et les Setters dans les Classes Meilleure Option ?

 
 
Définir les getters et setters à l’intérieur d’une classe offre des avantages significatifs en termes d’encapsulation, de protection des données, de lisibilité, de maintenance et de conformité aux principes de la programmation orientée objet.
 
Ces méthodes permettent de centraliser la gestion des propriétés, rendant votre code plus robuste, sécurisé et facile à comprendre.
 
En les plaçant au sein de la classe, vous garantissez que votre objet reste une unité cohérente et bien structurée, ce qui est essentiel pour écrire du code (code clean) propre et maintenable. 
 
 
 

Faut il utiliser Les Getters et  les Setters seulement avec les Classes ?

 
 

 

Et bien Non, en JavaScript, les getters et setters ne sont pas limités aux classes.

 

Vous pouvez également les utiliser avec des objets littéraux.

Les getters et setters sont des propriétés spéciales qui vous permettent de définir des méthodes pour accéder (getter) et modifier (setter) des propriétés d’un objet, sans utiliser explicitement de classes.

 

Comment Utiliser des Getters et Setters avec des Objets ?

 

Voici comment vous pouvez définir des getters et setters dans un objet littéral :

 

Exemple de Getter et Setter dans un Objet Littéral

 
 
 
const person = {
  firstName: 'John',
  lastName: 'Doe',
  // Définition d'un getter pour la propriété 'fullName'
  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  },
  // Définition d'un setter pour la propriété 'fullName'
  set fullName(name) {
    const [first, last] = name.split(' ');
    this.firstName = first;
    this.lastName = last;
  }
};

// Utilisation du getter
console.log(person.fullName); // John Doe

// Utilisation du setter
person.fullName = 'Jane Smith';
console.log(person.firstName); // Jane
console.log(person.lastName); // Smith

 
 

Dans cet exemple :

  • Getter (get fullName) : Cette méthode est appelée lorsque vous essayez d’accéder à person.fullName. Elle combine firstName et lastName pour retourner le nom complet.
  • Setter (set fullName) : Cette méthode est appelée lorsque vous essayez de définir person.fullName. Elle prend la chaîne de texte, la sépare en prénom et nom de famille, et les affecte à firstName et lastName.
 
 

Avantages d’Utiliser les Getters et Setters avec des Objets

 
 
  • Flexibilité : Vous pouvez facilement ajouter une logique d’accès ou de modification à vos propriétés sans devoir réécrire du code ou changer la structure de votre objet.
  • Simplification : Ils permettent de masquer la complexité derrière des propriétés simples, offrant une interface propre et intuitive.
  • Encapsulation : Comme avec les classes, les getters et setters permettent de contrôler et de valider les données avant qu’elles ne soient modifiées ou lues, même dans des objets littéraux.
 
 
Les getters et setters en JavaScript ne sont pas exclusifs aux classes. Ils peuvent être utilisés aussi bien dans des objets littéraux que dans des classes, offrant ainsi une grande flexibilité pour gérer les propriétés des objets.
 
 
 

Maintenant Peut on utiliser des Getters et Setters avec une Fonction Constructeur aussi ?

 
 

La réponse est Oui, vous pouvez également utiliser des getters et setters avec des fonctions constructeurs en JavaScript. 

Les fonctions constructeurs étaient la méthode principale pour créer des objets et des « classes » avant l’introduction de la syntaxe class en ES6.

Avec les fonctions constructeurs, vous pouvez toujours définir des getters et setters pour les propriétés de vos objets.

 

 

Utilisation des Getters et Setters avec une Fonction Constructeur

 

Exemple de Getter et Setter avec une Fonction Constructeur

 

Voici comment vous pourriez utiliser des getters et setters avec une fonction constructeur :

 
 
 
function Person(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;

  Object.defineProperty(this, 'fullName', {
    get() {
      return `${this.firstName} ${this.lastName}`;
    },
    set(name) {
      const [first, last] = name.split(' ');
      this.firstName = first;
      this.lastName = last;
    }
  });
}

const person = new Person('John', 'Doe');
console.log(person.fullName); // John Doe

person.fullName = 'Jane Smith';
console.log(person.firstName); // Jane
console.log(person.lastName); // Smith

 
 

Explication de l’Exemple

 
  1. Fonction Constructeur Person : Nous définissons une fonction constructeur qui initialise les propriétés firstName et lastName.

  2. Object.defineProperty : Pour ajouter un getter et un setter à l’objet créé par le constructeur, nous utilisons Object.defineProperty. Cette méthode nous permet de définir des propriétés sur l’objet avec des options spécifiques, comme get et set.

  3. Getter (get fullName) : La fonction get est appelée lorsqu’on accède à la propriété fullName. Elle combine firstName et lastName pour retourner le nom complet.

  4. Setter (set fullName) : La fonction set est appelée lorsqu’on modifie la propriété fullName. Elle prend une chaîne de texte, la sépare en prénom et nom de famille, puis met à jour les propriétés firstName et lastName.

 
 

Avantages d’Utiliser les Getters et Setters avec des Fonctions Constructeurs

 
 
  • Encapsulation : Comme avec les classes et les objets littéraux, vous pouvez encapsuler la logique d’accès et de modification des propriétés.

  • Compatibilité : Cette approche fonctionne avec les versions plus anciennes de JavaScript qui ne prennent pas en charge la syntaxe class.

  • Contrôle Accru : Object.defineProperty vous donne un contrôle précis sur les propriétés, vous permettant de les rendre non énumérables ou non configurables, par exemple.

 
 
Les getters et setters en JavaScript peuvent être utilisés avec des fonctions constructrices, vous offrant la possibilité d’encapsuler et de contrôler l’accès aux propriétés, tout en utilisant des fonctionnalités anciennes du langage.
 
Cette méthode est particulièrement utile si vous travaillez dans un environnement où la syntaxe class n’est pas supportée ou si vous préférez le style plus ancien de JavaScript.
 
 
 
 
 

Ce qu’il faut retenir :

 
Les getters et setters sont des méthodes pour gérer les propriétés des objets en JavaScript.
 
En les utilisant correctement, tu peux améliorer la structure, la sécurité et la maintenabilité de ton code source.
 
Maintenant que tu as une compréhension de base, pourquoi ne pas explorer l’ensemble des concepts Javascript basique ou plus avancés et découvrir comment les appliquer dans des projets réels ?
 

 

Pour les développeurs avides de perfectionner leurs compétences en JavaScript, j’offre un bonus exclusif. Télécharge notre Guide gratuit « Avec plein de Secrets et d’astuces en JavaScript » pour découvrir des techniques et astuces supplémentaires qui amélioreront ton code et ton expertise.

 

Le Guide Bonus Exclusif

 

En allant plus loin, avec ce Guide Bonus Exclusif rien que pour Toi !

Voici un guide complet sur le JavaScript, où tu verras des techniques pour performer en programmation Js.

Ce guide te permettra de perfectionner tes compétences et de devenir un expert JavaScript. Ne le rate pas et développe ton expertise !

 

En adoptant ce qu’il contient, tu rends ton apprentissage de JavaScript plus performant avec une plus grande facilité tous les jours . Voici de quoi enrichir tout de suite ton savoir-faire ? Le guide complet t’attend !

 
 

Rejoignez notre Newsletter et Restez Informé !

Vous souhaitez rester à jour avec les dernières tendances et actualités du monde du développement et le métier de développeur. Comment devenir développeur pro ? Rejoignez notre newsletter pour obtenir un accès exclusif à du contenu premium, des astuces de codage, des mises à jour sur les nouvelles fonctionnalités et bien plus encore !

Avantages de l’Inscription

  • Restez Informé: Recevez des articles informatifs sur les dernières avancées et les meilleures pratiques de codage et les softkills.
  • Promos Exclusives: Accédez à des formations détaillés et à des exemples de code pour améliorer vos compétences en programmation.
  • Aperçus des Nouveautés: Soyez parmi les premiers à découvrir les nouvelles fonctionnalités et les frameworks émergents dans l’écosystème du développement FrontEnd et Backend.
  • Communauté Engagée: Rejoignez une communauté passionnée de développeurs et partagez vos idées, questions et expériences.

Comment S’Inscrire

C’est simple et rapide ! Remplissez le formulaire d’inscription avec votre adresse e-mail et cliquez sur « S’Inscrire ». Vous recevrez régulièrement notre newsletter dans votre boîte de réception.


L’inscription à notre newsletter est un moyen idéal de rester informé et de progresser dans le domaine de la programmation et du développement pour devenir un développeur professionnel ou une développeuse pro.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *