Sono un fan dell'uso di asserzioni nel codice per verificare le precondizioni. La domanda è: è saggio usare le asserzioni nei metodi pubblici per verificare la precondizione?
La mia opinione personale è che se il mio metodo non può gestire l'assenza di un parametro (o qualche valore non valido) e fa parte di un'API ma non si basa sull'input dell'utente, allora il problema (parametro errato) deve essere gestito durante il processo di sviluppo (almeno con i test di integrazione) e non più tardi quando il software viene utilizzato sul campo. Per questo motivo uso le asserzioni anche nei metodi pubblici.
Intendo qualcosa del genere:
public class SomeMagic implements MagicAPI {
public WoW doSomeMagic( Stuff source ) {
assert source != null : "Incorrect use of the API";
// if assertions are deactivated (should be the case in production environment)
// this line will throw a NpEx
if ( source.isPlainStuff() ) {
// some magic with a plain stuff
}
return Wow.beSurprised;
}
}