¿Cuál es el mejor lugar para validar los parámetros de entrada de la función: en el llamador o en la propia función?
Como me gustaría mejorar mi estilo de codificación, trato de encontrar las mejores prácticas o algunas reglas para este problema. Cuándo y qué es mejor.
En mis proyectos anteriores, solíamos verificar y tratar cada parámetro de entrada dentro de la función (por ejemplo, si no es nulo). Ahora, he leído aquí en algunas respuestas y también en el libro Pragmatic Programmer, que la validación del parámetro de entrada es responsabilidad de quien llama.
Eso significa que debo validar los parámetros de entrada antes de llamar a la función. En todas partes se llama la función. Y eso plantea una pregunta: ¿no crea una duplicación de la condición de verificación en todos los lugares a los que se llama la función?
No me interesan solo las condiciones nulas, sino la validación de cualquier variable de entrada (valor negativo para la función sqrt
, división por cero, combinación incorrecta de estado y código postal, o cualquier otra cosa)
¿Existen algunas reglas sobre cómo decidir dónde verificar la condición de entrada?
Estoy pensando en algunos argumentos:
- cuando el tratamiento de la variable no válida puede variar, es bueno validarlo en el lado de la persona que llama (por ejemplo, función
sqrt()
; en algunos casos es posible que desee trabajar con un número complejo, por lo que trato la condición en el que llama) - cuando la condición de verificación es la misma en todas las personas que llaman, es mejor verificarla dentro de la función, para evitar duplicaciones
- la validación del parámetro de entrada en el llamante tiene lugar solo una antes de llamar a muchas funciones con este parámetro. Por lo tanto, la validación de un parámetro en cada función no es efectiva
- la solución correcta depende del caso particular
Espero que esta pregunta no sea duplicada de ninguna otra, busqué este problema y encontré preguntas similares, pero no mencionan exactamente este caso.