Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Trabalhando com Propriedades Privadas em Classes | Dominando Classes e Herança em JavaScript
Domínio Avançado de JavaScript

bookTrabalhando com Propriedades Privadas em Classes

Na programação orientada a classes, frequentemente há situações em que é necessário limitar o acesso direto a determinadas propriedades para proteger a integridade dos dados e controlar como eles são modificados.

O que são Propriedades Privadas?

Em JavaScript, as propriedades de classe normalmente são públicas, ou seja, podem ser acessadas e modificadas de fora da classe. No entanto, existem situações em que é necessário restringir o acesso a certas propriedades, garantindo que só possam ser acessadas ou modificadas dentro da própria classe. Essas são chamadas de propriedades privadas.

Propriedades privadas ajudam a criar uma separação clara entre o funcionamento interno da classe e o código externo. Elas são úteis quando se deseja ocultar dados sensíveis ou evitar alterações não intencionais em uma propriedade a partir de fora da classe.

Pense nisso como o motor de um carro. Embora seja possível dirigir o carro e interagir com seus controles, não se tem acesso direto aos componentes do motor enquanto dirige. O motor está protegido contra interferências externas, e apenas mecânicos autorizados (métodos da classe) podem fazer ajustes.

Como Declarar e Utilizar Campos Privados em uma Classe

Em JavaScript, propriedades privadas são declaradas usando a sintaxe # (introduzida no ES2020). Ao prefixar o nome de uma propriedade com #, ela se torna privada, ou seja, só pode ser acessada dentro da própria classe.

12345678910111213141516171819202122
class Animal { #type; // Declaring a private field constructor(name, type) { this.name = name; this.#type = type; // Assigning a value to the private field } getInfo() { return `${this.name} is a ${this.#type} animal.`; } changeType(newType) { this.#type = newType; // Modifying the private field within the class } } const lion = new Animal('Lion', 'Wild'); console.log(lion.getInfo()); // Output: Lion is a Wild animal // Attempt to access private field directly (this will cause an error) console.log(lion.#type); // Uncaught SyntaxError: Private field '#type' must be declared in an enclosing class
copy

Neste exemplo, #type é um campo privado. Ele não pode ser acessado ou modificado fora da classe Animal. Qualquer tentativa de acessar #type diretamente a partir de uma instância (como lion.#type) resultará em um erro de sintaxe. Isso garante que dados sensíveis ou críticos sejam modificados apenas por métodos controlados definidos na classe.

Benefícios das Propriedades Privadas

  1. Propriedades privadas protegem dados sensíveis ao impedir o acesso externo. Garantem que os dados só possam ser modificados por métodos específicos, reduzindo o risco de alterações acidentais ou não autorizadas;
  2. Propriedades privadas permitem encapsular detalhes de implementação, ocultando a lógica interna do usuário. Isso promove uma separação clara de responsabilidades e mantém o código modular;
  3. Com propriedades privadas, há maior controle sobre como os dados são acessados e modificados dentro de uma classe, assegurando que as modificações ocorram por métodos bem definidos.

Exemplo do Mundo Real: Conta Bancária

Considere uma analogia do mundo real para gerenciar o saldo de uma conta bancária. Em um banco, o saldo da sua conta é protegido e ninguém pode acessá-lo ou alterá-lo diretamente. A interação ocorre apenas por meio de processos autorizados, como depósitos e saques. Da mesma forma, é possível utilizar propriedades privadas em uma classe para proteger o campo de saldo contra acesso ou modificação direta.

12345678910111213141516171819202122232425262728293031323334353637
class BankAccount { #balance; // Private field constructor(owner, initialBalance) { this.owner = owner; this.#balance = initialBalance; } // Method to deposit money deposit(amount) { if (amount > 0) { this.#balance += amount; } } // Method to withdraw money withdraw(amount) { if (amount > 0 && amount <= this.#balance) { this.#balance -= amount; } } // Method to get account balance getBalance() { return `Account balance for ${this.owner}: $${this.#balance}`; } } const account = new BankAccount('John', 1000); account.deposit(500); console.log(account.getBalance()); // Output: Account balance for John: $1500 account.withdraw(200); console.log(account.getBalance()); // Output: Account balance for John: $1300 // Direct access to balance is not allowed console.log(account.#balance); // SyntaxError: Private field '#balance' must be declared in an enclosing class
copy

Neste exemplo, o campo #balance é privado e só pode ser acessado por métodos públicos como deposit, withdraw e getBalance. Isso garante que o saldo seja modificado de forma controlada, protegendo-o contra acesso ou manipulação não autorizados.

1. Qual é o principal motivo para utilizar propriedades privadas em uma classe?

2. Como declarar uma propriedade privada?

3. O que acontece se você tentar acessar uma propriedade privada fora de uma classe?

question mark

Qual é o principal motivo para utilizar propriedades privadas em uma classe?

Select the correct answer

question mark

Como declarar uma propriedade privada?

Select the correct answer

question mark

O que acontece se você tentar acessar uma propriedade privada fora de uma classe?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 7

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 2.22

bookTrabalhando com Propriedades Privadas em Classes

Deslize para mostrar o menu

Na programação orientada a classes, frequentemente há situações em que é necessário limitar o acesso direto a determinadas propriedades para proteger a integridade dos dados e controlar como eles são modificados.

O que são Propriedades Privadas?

Em JavaScript, as propriedades de classe normalmente são públicas, ou seja, podem ser acessadas e modificadas de fora da classe. No entanto, existem situações em que é necessário restringir o acesso a certas propriedades, garantindo que só possam ser acessadas ou modificadas dentro da própria classe. Essas são chamadas de propriedades privadas.

Propriedades privadas ajudam a criar uma separação clara entre o funcionamento interno da classe e o código externo. Elas são úteis quando se deseja ocultar dados sensíveis ou evitar alterações não intencionais em uma propriedade a partir de fora da classe.

Pense nisso como o motor de um carro. Embora seja possível dirigir o carro e interagir com seus controles, não se tem acesso direto aos componentes do motor enquanto dirige. O motor está protegido contra interferências externas, e apenas mecânicos autorizados (métodos da classe) podem fazer ajustes.

Como Declarar e Utilizar Campos Privados em uma Classe

Em JavaScript, propriedades privadas são declaradas usando a sintaxe # (introduzida no ES2020). Ao prefixar o nome de uma propriedade com #, ela se torna privada, ou seja, só pode ser acessada dentro da própria classe.

12345678910111213141516171819202122
class Animal { #type; // Declaring a private field constructor(name, type) { this.name = name; this.#type = type; // Assigning a value to the private field } getInfo() { return `${this.name} is a ${this.#type} animal.`; } changeType(newType) { this.#type = newType; // Modifying the private field within the class } } const lion = new Animal('Lion', 'Wild'); console.log(lion.getInfo()); // Output: Lion is a Wild animal // Attempt to access private field directly (this will cause an error) console.log(lion.#type); // Uncaught SyntaxError: Private field '#type' must be declared in an enclosing class
copy

Neste exemplo, #type é um campo privado. Ele não pode ser acessado ou modificado fora da classe Animal. Qualquer tentativa de acessar #type diretamente a partir de uma instância (como lion.#type) resultará em um erro de sintaxe. Isso garante que dados sensíveis ou críticos sejam modificados apenas por métodos controlados definidos na classe.

Benefícios das Propriedades Privadas

  1. Propriedades privadas protegem dados sensíveis ao impedir o acesso externo. Garantem que os dados só possam ser modificados por métodos específicos, reduzindo o risco de alterações acidentais ou não autorizadas;
  2. Propriedades privadas permitem encapsular detalhes de implementação, ocultando a lógica interna do usuário. Isso promove uma separação clara de responsabilidades e mantém o código modular;
  3. Com propriedades privadas, há maior controle sobre como os dados são acessados e modificados dentro de uma classe, assegurando que as modificações ocorram por métodos bem definidos.

Exemplo do Mundo Real: Conta Bancária

Considere uma analogia do mundo real para gerenciar o saldo de uma conta bancária. Em um banco, o saldo da sua conta é protegido e ninguém pode acessá-lo ou alterá-lo diretamente. A interação ocorre apenas por meio de processos autorizados, como depósitos e saques. Da mesma forma, é possível utilizar propriedades privadas em uma classe para proteger o campo de saldo contra acesso ou modificação direta.

12345678910111213141516171819202122232425262728293031323334353637
class BankAccount { #balance; // Private field constructor(owner, initialBalance) { this.owner = owner; this.#balance = initialBalance; } // Method to deposit money deposit(amount) { if (amount > 0) { this.#balance += amount; } } // Method to withdraw money withdraw(amount) { if (amount > 0 && amount <= this.#balance) { this.#balance -= amount; } } // Method to get account balance getBalance() { return `Account balance for ${this.owner}: $${this.#balance}`; } } const account = new BankAccount('John', 1000); account.deposit(500); console.log(account.getBalance()); // Output: Account balance for John: $1500 account.withdraw(200); console.log(account.getBalance()); // Output: Account balance for John: $1300 // Direct access to balance is not allowed console.log(account.#balance); // SyntaxError: Private field '#balance' must be declared in an enclosing class
copy

Neste exemplo, o campo #balance é privado e só pode ser acessado por métodos públicos como deposit, withdraw e getBalance. Isso garante que o saldo seja modificado de forma controlada, protegendo-o contra acesso ou manipulação não autorizados.

1. Qual é o principal motivo para utilizar propriedades privadas em uma classe?

2. Como declarar uma propriedade privada?

3. O que acontece se você tentar acessar uma propriedade privada fora de uma classe?

question mark

Qual é o principal motivo para utilizar propriedades privadas em uma classe?

Select the correct answer

question mark

Como declarar uma propriedade privada?

Select the correct answer

question mark

O que acontece se você tentar acessar uma propriedade privada fora de uma classe?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 7
some-alt