Sistema de validação funcional
Em sistemas reais, você sempre vai precisar validar dados vindos de formulários ou APIs. Se você colocar toda a validação numa função gigante, fica difícil de testar e reutilizar. Separar cada validação em funções puras (que só dependem dos parâmetros) permite compor validações complexas de forma simples e previsível.
O PROBLEMA
Crie funções puras de validação: validarEmail, validarCPF, validarTelefone. Crie validarTudo que as compõe.
EXEMPLO
validarTudo({email:"ana@ok.com", cpf:"12345678901"}) → {valido: true, erros: []}SOBRE O CONCEITO
O exercício pede funções puras de validação: validarEmail, validarCPF e validarTelefone. Uma função pura não modifica nada fora dela e sempre retorna o mesmo resultado para a mesma entrada. Depois, você cria validarTudo que chama cada uma e junta os erros. O erro comum é não separar em funções distintas, criando uma única função que tenta validar tudo de uma vez — isso quebra o princípio da responsabilidade única e dificulta a manutenção. Outro erro é fazer validações incompletas, como não verificar formato de CPF ou telefone corretamente. Usar arrow functions com const mantém o código moderno e evita problemas com this. O retorno esperado é um objeto com valido e erros, mostrando que a composição funciona.
RESOLUÇÃO