Menu
Coddy logo textTech

Validazione ed effetti collaterali

Fa parte della sezione Programmazione orientata agli oggetti del percorso JavaScript di Coddy. Lezione 45 di 56.

I getter e i setter possono fare più che limitarsi a leggere e scrivere proprietà: possono convalidare gli input e attivare effetti collaterali quando i valori cambiano.

Creiamo una classe User con la convalida:

class User {
  constructor(name, age) {
    this._name = name;
    this._age = age;
  }
  get age() {
    return this._age;
  }
  set age(value) {
    // Verifica che l'età sia un numero e rientri in un intervallo ragionevole
    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;
    // Effetto collaterale: registra un messaggio quando l'età cambia
    console.log(`Age updated to ${value}`);
  }
}

Ora, quando usiamo il setter, la convalida avviene automaticamente:

const user = new User('Alice', 25);
// Questo funziona
user.age = 30;  // Registra: "Age updated to 30"
// Questo genera un errore
user.age = -5;  // Errore: l'età deve essere compresa tra 0 e 120
// Anche questo genera un errore
user.age = "thirty";  // Errore: l'età deve essere un numero

Convalida = Controllare se un valore è valido prima di memorizzarlo
Effetti collaterali = Azioni aggiuntive che avvengono quando una proprietà cambia

challenge icon

Sfida

Ti viene fornita una classe BankAccount con un setter di base. Il tuo compito è completare il setter balance.

Aggiungi al setter:

  1. Validazione: Controlla se value non è un numero OPPURE è minore di 0: in tal caso, console.log("Invalid balance") e usa return per uscire dal setter
  2. Effetto collaterale: Dopo aver memorizzato un valore valido, console.log(\`Balance updated to $${value}\`)

Provalo tu

import { BankAccount } from './account.js';

// Casi di test
const account = new BankAccount("Savings");

// Test 1: saldo valido
account.balance = 100;
console.log(account.balance);

// Test 2: Invalid balance (negativo)
account.balance = -50;
console.log(account.balance);

// Test 3: Invalid balance (non è un numero)
account.balance = "abc";
console.log(account.balance);

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore JavaScript online