2013-05-27 10 views

risposta

9

La risposta a questa domanda è disponibile in The Java® Language Specification

Un'affermazione è una dichiarazione assert contenente un'espressione booleana. Un'asserzione è abilitata o disabilitata. Se l'asserzione è abilitata, l'esecuzione dell'asserzione causa la valutazione dell'espressione booleana e viene segnalato un errore se l'espressione è falsa. Se l'asserzione è disabilitata, l'esecuzione dell'asserzione non ha alcun effetto.

Quindi, se fosse un metodo assert poi tale codice:

assert(check()); 

volontà sempre chiamata al metodo check, indipendentemente se l'asserzione è abilitato o disabilitato.

Ora, poiché assert è una parola chiave con un trattamento speciale (come descritto sopra) il metodo check verrà chiamato solo quando l'asserzione è abilitato in quanto solo allora sarà valutata l'espressione booleana di questa asserzione.

1

Una possibile ragione è che le asserzioni possono essere abilitate o disabilitate - questo è meglio modellato in Java (un linguaggio senza preprocessore) con una parola chiave piuttosto che un metodo, poiché l'ipotesi con un metodo è che il codice verrebbe sempre eseguito (anche se sarebbe possibile far sì che il compilatore rimuovesse le chiamate al metodo se le asserzioni fossero disabilitate).

Contrastare questo ad asserzioni in, ad es. C o C++, in cui si dispone di un preprocessore: in tal caso, è sufficiente eseguire il preprocesso delle asserzioni in base al fatto che venga definito o meno un particolare flag di preprocessore.

2

Le asserzioni Java possono essere attivate e disattivate senza modifiche al codice. Ciò consente di evitare il sovraccarico di runtime delle asserzioni in produzione, sfruttando al contempo il loro valore di debug negli ambienti di sviluppo.

Le asserzioni implementate come chiamate di metodo nel codice dell'applicazione non si comporterebbero altrettanto bene. Anche se il metodo può essere cortocircuitato o meno come desiderato per ciascun ambiente, i cicli vengono sempre masterizzati dalla chiamata al metodo e il test per determinare se è attivo o meno.

In pratica, la parola chiave Java assert non è popolare, almeno non in questo frangente. Le asserzioni sono molto più spesso implementate nei test di JUnit, come hanno fatto altri manifesti. Nel mondo JUnit, le asserzioni sono chiamate al metodo. Non impongono nessun sovraccarico in produzione perché non sono nel codice della linea principale; sono in codice di test separato che viene eseguito solo in ambienti di sviluppo.

Problemi correlati