Ogni funzione dovrebbe verificare il suo input , anche quelle funzioni interne che non fanno parte di alcuna API o interfaccia pubblica.
I programmatori sono umani e gli umani sono notoriamente inetti nel mantenere i vincoli correlati in sincrono con l'evolversi delle basi di codice di grandi dimensioni - alla fine, la parte di "controllo input" che accade prima della "funzione di chiamata" scomparirà o si sposterà altrove o diventano incompleti e la funzione sarà chiamata con input errato. Quando ciò accade, i tuoi due obiettivi principali saranno:
- Rileva il problema il più rapidamente possibile (la fase di compilazione è l'opzione migliore)
- Non rompere nulla finché il problema non viene risolto
Per molte cose, è possibile utilizzare le funzionalità della lingua o il sistema di tipi per trasportare informazioni in fase di compilazione su quali proprietà sono state verificate. Questo è estremamente veloce (nessuna penalità in fase di esecuzione) e rileva errori in fase di compilazione. La maggior parte delle mie verifiche sono in questa categoria, per esempio.
Se la tua lingua non supporta la verifica in fase di compilazione per quello che stai facendo (che, in lingue moderne, è piuttosto raro), aggiungi un'asserzione di runtime.
Solo se l'errore del tuo codice non può avere conseguenze negative oltre a un bug facilmente rilevato e innocuo, e ti aspetti che il codice venga chiamato estremamente spesso, e la verifica non è una parte naturale del codice funzione comunque , puoi lasciare le verifiche. sqrt
sarebbe probabilmente qui.