Getters e setters
Em projetos reais, você frequentemente precisa controlar como uma propriedade de objeto é lida ou modificada — por exemplo, garantir que um valor seja positivo ou que um cálculo seja feito sob demanda. Getters e setters permitem encapsular essa lógica sem expor os detalhes internos, mantendo a API do objeto limpa e segura. Dominar esse padrão é essencial para escrever classes robustas e evitar efeitos colaterais inesperados.
O PROBLEMA
Crie classe Circulo com #raio privado, getter area, getter perimetro e setter raio que valida valor positivo.
EXEMPLO
const c = new Circulo(5); c.area → 78.54 c.perimetro → 31.42 c.raio = -1 → throw Error
SOBRE O CONCEITO
A classe Circulo usa um campo privado #raio para armazenar o valor internamente, impedindo acesso direto de fora — isso é a encapsulação. O getter area calcula e retorna a área usando Math.PI e **, e o getter perimetro calcula o perímetro. Eles são acessados como propriedades, sem (). O setter raio valida se o novo valor é positivo; caso contrário, lança um erro com throw. Erros comuns incluem chamar o getter com parênteses (ex.: c.area() — mas ele é uma propriedade, não um método), esquecer o # no nome do campo privado (tornando-o público) e não validar no setter, permitindo valores inválidos sem aviso.
RESOLUÇÃO