Onde é o melhor local para validar os parâmetros de entrada da função: no chamador ou na própria função?
Como gostaria de melhorar meu estilo de codificação, tento encontrar as melhores práticas ou algumas regras para esse problema. Quando e o que é melhor.
Nos meus projetos anteriores, costumávamos verificar e tratar todos os parâmetros de entrada dentro da função (por exemplo, se não for nulo). Agora, li aqui em algumas respostas e também no livro Pragmatic Programmer, que a validação do parâmetro de entrada é de responsabilidade do chamador.
Então, isso significa que eu devo validar os parâmetros de entrada antes de chamar a função. Em todos os lugares a função é chamada. E isso levanta uma questão: ela não cria uma duplicação da condição de verificação em qualquer lugar em que a função é chamada?
Não estou interessado apenas em condições nulas, mas na validação de quaisquer variáveis de entrada (valor negativo para sqrt
funcionar, dividir por zero, combinação incorreta de estado e CEP ou qualquer outra coisa)
Existem algumas regras para decidir onde verificar a condição de entrada?
Estou pensando em alguns argumentos:
- quando o tratamento de variável inválida pode variar, é bom validá-la no lado do chamador (por exemplo,
sqrt()
função - em alguns casos, talvez eu queira trabalhar com números complexos, por isso trato a condição no chamador) - quando a condição de verificação é a mesma em todos os chamadores, é melhor verificar dentro da função, para evitar duplicações
- a validação do parâmetro de entrada no chamador ocorre apenas uma antes da chamada de muitas funções com esse parâmetro. Portanto, a validação de um parâmetro em cada função não é eficaz
- a solução certa depende do caso particular
Espero que esta pergunta não seja duplicada de nenhuma outra, procurei esse problema e encontrei perguntas semelhantes, mas elas não mencionam exatamente esse caso.