Quali sono alcuni esempi di vita reale per capire il ruolo chiave delle asserzioni?
Le Asserzioni (tramite la parola chiave assert) sono state aggiunte in Java 1.4. Sono usate per verificare la correttezza di un invariante nel codice. Non dovrebbero mai essere attivate nel codice di produzione, e sono indicative di un bug o di un uso improprio di un percorso del codice. Possono essere attivati a run-time per mezzo dell'opzione -ea
sul comando java
, ma non sono attivati di default.
Un esempio:
public Foo acquireFoo(int id) {
Foo result = null;
if (id > 50) {
result = fooService.read(id);
} else {
result = new Foo(id);
}
assert result != null;
return result;
}
Le asserzioni sono usate per controllare le postcondizioni e "non dovrebbero mai fallire" precondizioni. Il codice corretto non dovrebbe mai fallire un'asserzione; quando scattano, dovrebbero indicare un bug (si spera in un posto che sia vicino a dove si trova l'effettivo luogo del problema).
Un esempio di asserzione potrebbe essere quello di controllare che un particolare gruppo di metodi sia chiamato nel giusto ordine (ad esempio, che hasNext()
sia chiamato prima di next()
in un Iterator
).
Un esempio del mondo reale, da una classe Stack (da Articoli sulle asserzioni in Java)
public int pop() {
// precondition
assert !isEmpty() : "Stack is empty";
return stack[--num];
}