Dove è il posto migliore per convalidare i parametri di input della funzione: nel chiamante o nella funzione stessa?
Come vorrei migliorare il mio stile di codifica, cerco di trovare le migliori pratiche o alcune regole per questo problema. Quando e cosa è meglio.
Nei miei progetti precedenti, abbiamo usato per controllare e trattare ogni parametro di input all'interno della funzione, (ad esempio se non è null). Ora, ho letto qui in alcune risposte e anche nel libro Pragmatic Programmer, che la validazione del parametro di input è responsabilità del chiamante.
Quindi significa che dovrei convalidare i parametri di input prima di chiamare la funzione. Ovunque viene chiamata la funzione. E ciò solleva una domanda: non crea una duplicazione delle condizioni di controllo ovunque sia chiamata la funzione?
Non mi interessa solo in condizioni nulle, ma nella convalida di qualsiasi variabile di input (valore negativo in sqrt
funzione, divisione per zero, combinazione errata di stato e codice ZIP o qualsiasi altra cosa)
Ci sono delle regole su come decidere dove controllare la condizione di input?
Sto pensando ad alcuni argomenti:
- quando il trattamento della variabile non valida può variare, è buono convalidarlo nel lato del chiamante (es. funzione
sqrt()
- in alcuni casi potrei voler lavorare con un numero complesso, quindi considero la condizione nel chiamante) - quando la condizione di controllo è la stessa in ogni chiamante, è meglio controllarla all'interno della funzione, per evitare duplicazioni
- la convalida del parametro di ingresso nel chiamante avviene solo prima di chiamare molte funzioni con questo parametro. Pertanto la convalida di un parametro in ciascuna funzione non è efficace
- la soluzione giusta dipende dal caso particolare
Spero che questa domanda non sia duplicata di altre, ho cercato questo problema e ho trovato domande simili ma non menzionano esattamente questo caso.