Menu
Coddy logo textTech

Métodos Privados

Parte da seção Programação Orientada a Objetos do Journey de JavaScript da Coddy — lição 19 de 56.

Métodos privados em classes JavaScript permitem que você oculte detalhes de implementação e evite o acesso externo à funcionalidade interna.

A partir do ES2022, métodos privados podem ser definidos usando o prefixo #:

class Counter {
  #count = 0;
  
  // Cria um método privado
  #increment() {
    this.#count++;
  }
  
  // Método público que usa o método privado
  addOne() {
    this.#increment();
    return this.#count;
  }
}

Vamos criar uma instância de Counter:

const myCounter = new Counter();

Podemos chamar o método público:

console.log(myCounter.addOne()); // Saída: 1

Mas tentar acessar o método privado diretamente causará um erro:

myCounter.#increment(); // Erro: O método privado não é acessível fora da classe

Métodos privados ajudam a manter o encapsulamento ao manter os detalhes de implementação interna ocultos do mundo exterior.

challenge icon

Desafio

Você recebeu uma classe MessageBox que armazena mensagens. Sua tarefa é adicionar um método privado chamado #isValidMessage(text) que valida mensagens. Ele deve:

  • Retornar true se o texto não estiver vazio e tiver menos de 100 caracteres
  • Retornar false caso contrário

Folha de consulta

Métodos privados em classes JavaScript são definidos usando o prefixo # e só podem ser acessados de dentro da classe:

class Counter {
  #count = 0;
  
  // Private method
  #increment() {
    this.#count++;
  }
  
  // Public method that uses the private method
  addOne() {
    this.#increment();
    return this.#count;
  }
}

Métodos privados não podem ser acessados de fora da classe:

const myCounter = new Counter();
myCounter.addOne(); // Works
myCounter.#increment(); // Error: Private method is not accessible

Métodos privados ajudam a manter o encapsulamento, ocultando detalhes da implementação interna.

Experimente você mesmo

import { MessageBox } from './messageBox.js';

// Usando a caixa de mensagem
const box = new MessageBox();

console.log(box.setMessage("Hello"));    // "Message set!" (usa #isValidMessage)
console.log(box.setMessage(""));         // "Invalid message!" (usa #isValidMessage)
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos