Gestione delle Proprietà con Getter e Setter
Getter e setter offrono un modo potente per controllare l'accesso alle proprietà di un oggetto in JavaScript.
Cosa sono Getter e Setter?
In JavaScript, getter e setter sono metodi speciali che consentono un accesso controllato alle proprietà di un oggetto. Offrono la flessibilità di definire come una proprietà viene recuperata e modificata, proteggendo allo stesso tempo lo stato interno dell'oggetto.
- Getter: Metodo utilizzato per recuperare (ottenere) il valore di una proprietà;
- Setter: Metodo utilizzato per impostare o aggiornare il valore di una proprietà.
Si può pensare a un caveau bancario. Il caveau contiene oggetti di valore (proprietà private) e il cassiere (getter/setter) agisce come custode. Non è possibile accedere direttamente al caveau, ma il cassiere può recuperare o aggiornare gli oggetti per te in base a determinate regole e validazioni.
Come definire e utilizzare Getter e Setter
Getter e setter vengono definiti utilizzando le parole chiave get e set all'interno di una classe. Quando si accede a una proprietà, il getter viene invocato automaticamente. Allo stesso modo, quando si modifica una proprietà, viene chiamato il setter invece di modificare direttamente la proprietà.
12345678910111213141516171819202122232425262728293031323334class Animal { #type; // Private field constructor(name, type) { this.name = name; this.#type = type; // Assigning the private field } // Getter for the type property get type() { return this.#type; } // Setter for the type property set type(newType) { if (newType) { this.#type = newType; } else { console.log('Invalid type'); } } } const lion = new Animal('Lion', 'Wild'); // Using getter to access the private type console.log(lion.type); // Output: Wild // Using setter to modify the private type lion.type = 'Domestic'; console.log(lion.type); // Output: Domestic // Trying to set an invalid value lion.type = ''; // Output: Invalid type
In questo esempio, #type è una proprietà privata e vengono definiti un getter (get type()) per recuperare il suo valore e un setter (set type(newType)) per modificarlo. Il setter include una validazione per impedire l'assegnazione di un valore non valido, dimostrando come sia possibile controllare gli aggiornamenti dei dati privati.
Vantaggi di getter e setter
Accesso controllato
- I getter consentono di definire come viene accessato il valore di una proprietà, permettendo di elaborare o manipolare il valore prima di restituirlo;
- I setter offrono il controllo su come una proprietà viene aggiornata, consentendo di validare o trasformare i dati prima di assegnarli a un campo privato.
Protezione dei dati
- L'utilizzo di getter e setter aiuta a salvaguardare lo stato interno di un oggetto fornendo un'interfaccia controllata per l'interazione;
- Le proprietà private possono rimanere nascoste ed è possibile esporre solo le informazioni necessarie al codice esterno.
Flessibilità
Getter e setter permettono di aggiungere logica aggiuntiva—come validazione o logging—durante l'accesso o la modifica delle proprietà senza alterare il modo in cui il codice esterno interagisce con l'oggetto.
Esempio: Account utente con validazione della password
Immagina di gestire account utente in cui le password devono rispettare determinati standard di sicurezza. Utilizzando un setter, puoi imporre la robustezza della password, mentre un getter potrebbe recuperare una versione mascherata della password per scopi di visualizzazione.
12345678910111213141516171819202122232425262728293031323334class UserAccount { #password; // Private field constructor(username, password) { this.username = username; this.#password = password; } // Getter for password (returning a masked version) get password() { return '*'.repeat(this.#password.length); // Mask the password when retrieved } // Setter for password with validation set password(newPassword) { if (newPassword.length >= 8) { this.#password = newPassword; } else { console.log('Password must be at least 8 characters long'); } } } const user = new UserAccount('nick_feather', 'secret123'); // Accessing the password using the getter (masked) console.log(user.password); // Output: ********* // Setting a new valid password using the setter user.password = 'strongPassword123'; console.log(user.password); // Output: *************** // Trying to set an invalid password user.password = '123'; // Output: Password must be at least 8 characters long
In questo esempio, il getter restituisce una versione mascherata della password per nascondere il valore reale, mentre il setter applica la validazione della password, assicurando che la password sia lunga almeno 8 caratteri.
Esempio con logica di validazione tramite getter e setter
Ecco un altro esempio in cui gestiamo l'età di una persona e garantiamo che il valore rimanga entro un intervallo ragionevole:
12345678910111213141516171819202122232425262728293031323334class Person { #age; // Private field constructor(name, age) { this.name = name; this.#age = age; } // Getter for age get age() { return this.#age; } // Setter for age with validation set age(newAge) { if (newAge > 0 && newAge < 120) { this.#age = newAge; } else { console.log('Invalid age'); } } } const peter = new Person('Peter', 30); // Accessing the age using the getter console.log(peter.age); // Output: 30 // Setting a new valid age using the setter peter.age = 35; console.log(peter.age); // Output: 35 // Trying to set an invalid age peter.age = 150; // Output: Invalid age
Questo esempio dimostra come un setter possa garantire che un'età rimanga all'interno di un intervallo valido, impedendo che vengano memorizzati dati non validi.
1. Qual è lo scopo principale dell'utilizzo dei getter?
2. Nel seguente codice, quale sarà l'output di console.log(user.password);?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 2.22
Gestione delle Proprietà con Getter e Setter
Scorri per mostrare il menu
Getter e setter offrono un modo potente per controllare l'accesso alle proprietà di un oggetto in JavaScript.
Cosa sono Getter e Setter?
In JavaScript, getter e setter sono metodi speciali che consentono un accesso controllato alle proprietà di un oggetto. Offrono la flessibilità di definire come una proprietà viene recuperata e modificata, proteggendo allo stesso tempo lo stato interno dell'oggetto.
- Getter: Metodo utilizzato per recuperare (ottenere) il valore di una proprietà;
- Setter: Metodo utilizzato per impostare o aggiornare il valore di una proprietà.
Si può pensare a un caveau bancario. Il caveau contiene oggetti di valore (proprietà private) e il cassiere (getter/setter) agisce come custode. Non è possibile accedere direttamente al caveau, ma il cassiere può recuperare o aggiornare gli oggetti per te in base a determinate regole e validazioni.
Come definire e utilizzare Getter e Setter
Getter e setter vengono definiti utilizzando le parole chiave get e set all'interno di una classe. Quando si accede a una proprietà, il getter viene invocato automaticamente. Allo stesso modo, quando si modifica una proprietà, viene chiamato il setter invece di modificare direttamente la proprietà.
12345678910111213141516171819202122232425262728293031323334class Animal { #type; // Private field constructor(name, type) { this.name = name; this.#type = type; // Assigning the private field } // Getter for the type property get type() { return this.#type; } // Setter for the type property set type(newType) { if (newType) { this.#type = newType; } else { console.log('Invalid type'); } } } const lion = new Animal('Lion', 'Wild'); // Using getter to access the private type console.log(lion.type); // Output: Wild // Using setter to modify the private type lion.type = 'Domestic'; console.log(lion.type); // Output: Domestic // Trying to set an invalid value lion.type = ''; // Output: Invalid type
In questo esempio, #type è una proprietà privata e vengono definiti un getter (get type()) per recuperare il suo valore e un setter (set type(newType)) per modificarlo. Il setter include una validazione per impedire l'assegnazione di un valore non valido, dimostrando come sia possibile controllare gli aggiornamenti dei dati privati.
Vantaggi di getter e setter
Accesso controllato
- I getter consentono di definire come viene accessato il valore di una proprietà, permettendo di elaborare o manipolare il valore prima di restituirlo;
- I setter offrono il controllo su come una proprietà viene aggiornata, consentendo di validare o trasformare i dati prima di assegnarli a un campo privato.
Protezione dei dati
- L'utilizzo di getter e setter aiuta a salvaguardare lo stato interno di un oggetto fornendo un'interfaccia controllata per l'interazione;
- Le proprietà private possono rimanere nascoste ed è possibile esporre solo le informazioni necessarie al codice esterno.
Flessibilità
Getter e setter permettono di aggiungere logica aggiuntiva—come validazione o logging—durante l'accesso o la modifica delle proprietà senza alterare il modo in cui il codice esterno interagisce con l'oggetto.
Esempio: Account utente con validazione della password
Immagina di gestire account utente in cui le password devono rispettare determinati standard di sicurezza. Utilizzando un setter, puoi imporre la robustezza della password, mentre un getter potrebbe recuperare una versione mascherata della password per scopi di visualizzazione.
12345678910111213141516171819202122232425262728293031323334class UserAccount { #password; // Private field constructor(username, password) { this.username = username; this.#password = password; } // Getter for password (returning a masked version) get password() { return '*'.repeat(this.#password.length); // Mask the password when retrieved } // Setter for password with validation set password(newPassword) { if (newPassword.length >= 8) { this.#password = newPassword; } else { console.log('Password must be at least 8 characters long'); } } } const user = new UserAccount('nick_feather', 'secret123'); // Accessing the password using the getter (masked) console.log(user.password); // Output: ********* // Setting a new valid password using the setter user.password = 'strongPassword123'; console.log(user.password); // Output: *************** // Trying to set an invalid password user.password = '123'; // Output: Password must be at least 8 characters long
In questo esempio, il getter restituisce una versione mascherata della password per nascondere il valore reale, mentre il setter applica la validazione della password, assicurando che la password sia lunga almeno 8 caratteri.
Esempio con logica di validazione tramite getter e setter
Ecco un altro esempio in cui gestiamo l'età di una persona e garantiamo che il valore rimanga entro un intervallo ragionevole:
12345678910111213141516171819202122232425262728293031323334class Person { #age; // Private field constructor(name, age) { this.name = name; this.#age = age; } // Getter for age get age() { return this.#age; } // Setter for age with validation set age(newAge) { if (newAge > 0 && newAge < 120) { this.#age = newAge; } else { console.log('Invalid age'); } } } const peter = new Person('Peter', 30); // Accessing the age using the getter console.log(peter.age); // Output: 30 // Setting a new valid age using the setter peter.age = 35; console.log(peter.age); // Output: 35 // Trying to set an invalid age peter.age = 150; // Output: Invalid age
Questo esempio dimostra come un setter possa garantire che un'età rimanga all'interno di un intervallo valido, impedendo che vengano memorizzati dati non validi.
1. Qual è lo scopo principale dell'utilizzo dei getter?
2. Nel seguente codice, quale sarà l'output di console.log(user.password);?
Grazie per i tuoi commenti!