Toda função deve verificar sua entrada , mesmo aquelas funções internas que não fazem parte de nenhuma API ou interface pública.
Programadores são humanos, e humanos são notoriamente ineptos em manter restrições relacionadas em sincronia conforme grandes bases de código evoluem - eventualmente, a parte de "entrada de verificação" que acontece antes de "função de chamada" desaparecer em outro lugar ou ficar incompleto, e a função será chamada com entrada incorreta. Quando isso acontecer, seus dois principais objetivos serão:
- Detectar o problema o mais rápido possível (tempo de compilação sendo a melhor opção)
- Não quebre nada até que o problema seja corrigido
Para muitas coisas, você pode usar os recursos de idioma ou o sistema de tipos para transportar informações em tempo de compilação sobre quais propriedades foram verificadas. Isso é extremamente rápido (sem penalidade de tempo de execução) e detecta erros em tempo de compilação. A maioria das minhas verificações está nessa categoria, por exemplo.
Se o seu idioma não oferecer suporte à verificação em tempo de compilação para o que você está fazendo (o que, nos idiomas modernos, é bastante raro), adicione uma declaração em tempo de execução.
Somente se a falha do seu código não puder ter conseqüências adversas além de um bug facilmente detectado e inócuo, e você espera que esse código seja chamado com muita frequência, e a verificação não é uma parte natural do código de função de qualquer maneira, você pode deixar as verificações. sqrt
provavelmente estaria aqui.