Até aqui, já criamos classes, métodos e herança.

Mas ainda existe um problema clássico:

como proteger dados internos de uma classe?

É exatamente isso que os campos privados resolvem.

🎯 Objetivo da aula

Ao final desta aula, você será capaz de:

  • Entender o que são campos privados
  • Usar o prefixo #
  • Diferenciar campos públicos e privados
  • Proteger o estado interno de uma classe
  • Evitar acessos indevidos

O problema dos campos públicos

Até pouco tempo atrás, todo campo de uma classe era público:

 
  class ContaBancaria { constructor(saldo) { this.saldo = saldo; } }
  const conta = new ContaBancaria(1000);
  conta.saldo = 0; // ❌ qualquer um pode alterar

Isso funciona, mas:

  • quebra regras de negócio
  • expõe dados sensíveis
  • dificulta manutenção

O que são campos privados?

Campos privados são propriedades que:

  • só podem ser acessadas dentro da classe
  • não existem fora dela
  • usam o prefixo #
O # faz parte do nome do campo.

Criando um campo privado

 
  class ContaBancaria { #saldo;
  constructor(saldoInicial) {
    this.#saldo = saldoInicial;
  }
  consultarSaldo() 
  {
    return this.#saldo;
  }
}
const conta = new ContaBancaria(1000);
console.log(conta.consultarSaldo()); // Saída será: 1000

Agora o campo #saldo está protegido.

Tentando acessar de fora

 console.log(conta.#saldo); // ❌ Erro de sintaxe 
Campos privados NÃO podem ser acessados fora da classe.

Isso não é um erro em tempo de execução — o código nem chega a rodar.

Campos privados + métodos públicos

O padrão correto é:

  • campos privados guardam dados
  • métodos públicos controlam o acesso
 
  class ContaBancaria { #saldo;
  constructor(saldoInicial) {
    this.#saldo = saldoInicial;
  }
  depositar(valor) {
    if (valor > 0) {
      this.#saldo += valor;
    }
  }

sacar(valor) {
  if (valor <= this.#saldo) {
    this.#saldo -= valor;
  }
}

consultarSaldo() 
  {
  return this.#saldo;
  }
}

const conta = new ContaBancaria(500);
conta.depositar(200);
conta.sacar(100);
console.log(conta.consultarSaldo()); // Saída será: 600

Por que isso é encapsulamento real?

Porque agora:

  • ninguém altera o estado diretamente
  • regras ficam centralizadas
  • a classe controla seu próprio estado

Isso aproxima JavaScript de linguagens com encapsulamento clássico — mas sem perder flexibilidade.

Campos privados não aparecem no objeto

 console.log(Object.keys(conta)); // Saída será: [] 

Campos privados:

  • não são enumeráveis
  • não aparecem em inspeções
  • não podem ser acessados por reflexão comum

Comparação com convenções antigas

Antes do #, era comum ver:

 class Conta { constructor() { this._saldo = 0; // ❌ só convenção } } 

Isso:

  • não é privado de verdade
  • pode ser acessado externamente
Campos privados com # são realmente privados.

Quando usar campos privados?

  • dados sensíveis
  • estado interno
  • regras de negócio
  • proteção contra uso indevido

Quando não exagerar

Nem todo campo precisa ser privado.

  • objetos simples
  • DTOs
  • dados de leitura
Encapsular tudo sem necessidade pode atrapalhar.

Resumo da aula para nunca mais esquecer

  • Campos privados usam #
  • Não podem ser acessados fora da classe
  • Protegem o estado interno
  • Garantem encapsulamento real
  • Substituem convenções frágeis

Na próxima aula, vamos fechar esse bloco com Métodos Estáticos.


HARDWARE

Entendendo o seu computador

O que há dentro do meu computador?

Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.

  • Gabinetes

  • Placas-Mãe

  • Processadores

  • Memória

  • Fontes

  • Drives Ópticos

  • Discos Rígidos

  • SSD

  • Placas de Som

  • Placas de Vídeo

Você Sabia?

Street Fighter 2, lançado para o Super Nintendo no início dos anos 90, foi o principal responsável pelo aumento nas vendas deste console. Graças ao sucesso do título nos Arcades e à perfeita adaptação ao console, muitos consumidores adquiriram o SNES para jogarem o título em casa. Saiba mais.


O épico jogo River Raid, do Atari, foi desenhado e boa parte de sua programação foi feita por uma mulher: Carol Shaw, uma excelente programadora e funcionária da Activision em 1982. Saiba mais sobre a história deste incrível jogo, aqui.


O console Nintendo Entertainment System (NES), da Nintendo, detém o recorde de videogame mais clonado em todo o mundo. Já foram catalogados mais de 300 aparelhos diferentes capazes de reproduzir seus jogos! Saiba mais sobre ele aqui.


Ao completar o nível 99 do jogo Duck Hunt, para Nintendo, o jogo retorna ao primeiro nível, mas um bug impede que se acerte os patos neste recomeço. Este é um exemplo do que é chamado no mundo dos games de "Kill Screen".


O ábaco é o dispositivo de cálculo mais antigo construído e conhecido pelo homem. Suas formas mais primitivas datam de 400 a.C. e eles foram encontrados na China e na Babilônia. Para saber mais sobre a história dos computadores, clique aqui.