Menu
Coddy logo textTech

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 de bord 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 qu'il 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 lève une erreur
user.age = -5;  // Erreur : Age must be between 0 and 120

// Cela lève également une erreur
user.age = "thirty";  // Erreur : Age must be a number

Validation = Vérifier si une valeur est valide avant de la stocker
Effets secondaires = Actions supplémentaires qui se produisent lorsqu'une propriété change

challenge icon

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 :

  1. Validation : Vérifiez si value n'est pas un nombre OU est inférieur à 0 - si c'est le cas, console.log("Invalid balance") et utilisez return pour quitter le setter
  2. Effet secondaire : Après avoir stocké une valeur valide, console.log(\`Balance updated to ${value}\`)

Aide-mémoire

Les getters et setters peuvent valider les entrées et déclencher des effets secondaires lorsque les valeurs changent.

La Validation vérifie si une valeur est valide avant de la stocker :

set age(value) {
  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;
}

Les Effets Secondaires sont des actions supplémentaires qui se produisent lorsqu'une propriété change :

set age(value) {
  // validation...
  this._age = value;
  
  // Side effect: log when age changes
  console.log(`Age updated to ${value}`);
}

Exemple d'utilisation :

const user = new User('Alice', 25);
user.age = 30;  // Logs: "Age updated to 30"
user.age = -5;  // Error: Age must be between 0 and 120

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);

quiz iconTestez-vous

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