Validation et effets de bord
Fait partie de la section Programmation Orientée Objet du Journey JavaScript de Coddy — leçon 45 sur 56.
Les getters et les setters peuvent faire plus que simplement lire et écrire des propriétés - ils peuvent valider les entrées et déclencher des effets secondaires lorsque les valeurs changent.
Créons une classe User avec validation :
class User {
constructor(name, age) {
this._name = name;
this._age = age;
}
get age() {
return this._age;
}
set age(value) {
// Valider que l'âge est un nombre et se situe dans une plage raisonnable
if (typeof value !== 'number') {
throw new Error('Age must be a number');
}
if (value < 0 || value > 120) {
throw new Error('Age must be between 0 and 120');
}
this._age = value;
// Effet secondaire : journaliser quand l'âge change
console.log(`Age updated to ${value}`);
}
}Maintenant, lorsque nous utilisons le setter, la validation s'effectue automatiquement :
const user = new User('Alice', 25);
// Cela fonctionne
user.age = 30; // Affiche : "Age updated to 30"
// Cela génère une erreur
user.age = -5; // Erreur : L'âge doit être compris entre 0 et 120
// Cela génère également une erreur
user.age = "thirty"; // Erreur : L'âge doit être un nombreValidation = Vérifier si une valeur est valide avant de la stocker
Effets de bord = Actions supplémentaires qui se produisent lorsqu'une propriété change
Défi
On vous donne une classe BankAccount avec un setter de base. Votre tâche est de compléter le setter balance.
Ajoutez au setter :
- Validation : Vérifiez si
valuen'est pas un nombre OU est inférieur à 0 - si c'est le cas,console.log("Invalid balance")et utilisezreturnpour quitter le setter - Effet secondaire : Après avoir stocké une valeur valide,
console.log(\`Balance updated to ${value}\`)
Essayez vous-même
import { BankAccount } from './account.js';
// Cas de test
const account = new BankAccount("Savings");
// Test 1 : Solde valide
account.balance = 100;
console.log(account.balance);
// Test 2 : Solde invalide (négatif)
account.balance = -50;
console.log(account.balance);
// Test 3 : Solde invalide (pas un nombre)
account.balance = "abc";
console.log(account.balance);
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation Orientée Objet
1Objets et le mot-clé this
Révision rapide : Les objetsAjouter des méthodes aux objetsComprendre le mot-clé thisFonctions constructeursLe mot-clé newDéfi récapitulatif7L'héritage et le mot-clé extends
L'héritageLa relation « est un »Le mot-clé extendsLa méthode super()Hériter des propriétés et méthodesDéfi récapitulatif10Polymorphisme
Qu'est-ce que le polymorphisme ?Redéfinition de méthodes héritéesUtiliser superDéfi récapitulatif13Composition vs Héritage
Les relations « has-a » vs « is-a »Les limites de l'héritage profondConstruction d'objets2Organisation du code
Qu'est-ce qu'un module ?Exporter avec exportImporter avec importExports par défaut vs nommés5Encapsulation & Accès
EncapsulationChamps de classe publics et privésMéthodes privéesDéfi récapitulatif8Organisation du code POO
Organiser les classes en modules11Projet : Un moteur de rendu de formes
Configuration : Classe Shape et ExportationHéritage de la classe CircleRedéfinition et méthode AreaCompteur de formes statique14Système de gestion de bibliothèque
Conception de la bibliothèqueClasse Book avec compositionValidation de l'auteur du livre3Classes et Objets
Qu'est-ce qu'une classe ?Créer des instancesPropriétés et méthodesDéfi récapitulatif9Méthodes et propriétés statiques
Niveau classe vs Niveau instancePropriétés statiquesMéthodes utilitaires statiquesDéfi récapitulatif12Getters et Setters
Les mots-clés get et setPropriétés calculéesValidation et effets de bordDéfi récapitulatif