Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Gestione delle Proprietà con Getter e Setter | Padronanza delle Classi e dell'Ereditarietà in JavaScript
Padronanza Avanzata di JavaScript

bookGestione 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à.

12345678910111213141516171819202122232425262728293031323334
class 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
copy

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.

12345678910111213141516171819202122232425262728293031323334
class 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
copy

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:

12345678910111213141516171819202122232425262728293031323334
class 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
copy

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

question mark

Qual è lo scopo principale dell'utilizzo dei getter?

Select the correct answer

question mark

Nel seguente codice, quale sarà l'output di console.log(user.password);?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 9

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Awesome!

Completion rate improved to 2.22

bookGestione 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à.

12345678910111213141516171819202122232425262728293031323334
class 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
copy

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.

12345678910111213141516171819202122232425262728293031323334
class 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
copy

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:

12345678910111213141516171819202122232425262728293031323334
class 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
copy

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

question mark

Qual è lo scopo principale dell'utilizzo dei getter?

Select the correct answer

question mark

Nel seguente codice, quale sarà l'output di console.log(user.password);?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 9
some-alt