java - thrown - jupiter expected exception




Asserire parole chiave in java (4)

Utilizzi questa parola chiave o lanci qualche eccezione di runtime di validazione? Quali benefici ti dà o perché pensi che non valga la pena di usarlo?


Quali benefici ti dà o perché pensi che non valga la pena di usarlo?

L'uso di asserti per i controlli obbligatori, come altri hanno raccomandato, è una pratica pericolosa .

Cosa succede quando un altro sviluppatore utilizza la tua libreria? Oppure un amministratore di sistema o un utente esperto si dimentica, o peggio ancora non sa, di abilitare gli asseriti con il flag -ea in fase di runtime? Perdi tutti questi controlli, ecco cosa.

Gli asserti sono uno strumento di sviluppo. Il fatto che lo stato di default del flag sia disattivato è un dead give-away.

Nessuna funzionalità o vantaggio nella propria applicazione deve mai dipendere dal fatto che una funzione sia attiva.

Come sfondo, gli assert sono utilizzati allo stesso modo in C / C ++ da cui è stata presa la funzione. In C / C ++ uno sviluppatore di solito può passare in #define DEBUG ... in fase di compilazione per abilitare o disabilitare le asserzioni. Con codice di produzione C / C ++ che di solito ha questa funzione disattivata.

Concettualmente, lo stesso dovrebbe valere per Java. In produzione, utilizzare condizioni condizionali ed eccezioni. Sono essenzialmente la stessa cosa.


Per essere precisi sulla tua domanda:

Assert viene utilizzato per convalidare la condizione di una dichiarazione.

assert (some condition)
Example : assert (6 < 7) // condition pass
          assert (6 > 7) // throws AssertionException here

La maggior parte delle persone usa asser per il seguente caso d'uso per String: (Ma personalmente odio usare assert per questo):

assert (obj != null || obj.isEmpty() || ... )

Mi piace piuttosto usare google guava che è pulito e serve allo scopo:

Obj.isNullOrEmpty()

Maggiori informazioni: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Strings.html


puoi usarlo per abilitare qualcosa durante dev, quindi disabilitarlo completamente sul sito live. per esempio

...
assert debug("xxx");
...

static boolean debug(String format, Object... args){ print(...); return true; }

l'istruzione debug aggiungerà zero overhead sul sito live.


Assert genererà un errore di runtime ( AssertionError ) se la sua condizione è falsa. Gli avvertimenti offrono un modo semplificato di documentare, verificare e applicare i criteri di correttezza del codice. I vantaggi sono un aggancio a livello linguistico per definire e manipolare queste condizioni di correttezza. Nella misura in cui desideri abilitarli o disabilitarli (ci sono argomenti riguardo al fatto che questa sia o meno una buona idea) puoi farlo dalla riga di comando di JVM. Alcuni commentatori sottostanti notano che le asserzioni sono disabilitate di default a meno che non si esegua in modalità debug; la mia pratica è di aggiungere "-ea" (abilita asserzioni) nei miei script di wrapper in ogni momento. Anche nel codice sensibile alle prestazioni, per me il tradeoff pesa a favore della sicurezza / correttezza che ottengo dalle asserzioni. Asserzioni su Oracle e AssertionError

Notare la distinzione tra guasti attesi o imprevisti (eccezioni), che possono essere al di fuori del controllo e errori di asserzione - errori di asserzione presupposti del programmatore del documento e indicare un programma errato piuttosto che una condizione esterna imprevista o condizione eccezionale prevista. Se si verifica un errore di asserzione, l'interpretazione è che il programmatore ha frainteso o espresso erroneamente il programma , piuttosto che altre fonti di errore o fallimento.

In pratica, lo uso per documentare ipotesi ovvie o non ovvie che faccio e invarianti che voglio far valere mentre produco codice (in particolare privato / interno), chiarendo a me stesso e agli altri perché queste ipotesi sono fatte, dove sono fatto e se sono convalidati o meno. Molto meglio dei commenti allo stesso effetto. Questo è un (piccolo) passo verso la progettazione per contratto .

L'efficace articolo n. 38 "Verifica i parametri di validità" ( Google Books , Amazon.com ) offre un'utile presentazione della distinzione tra il controllo dei parametri e l'uso appropriato delle asserzioni.

Relativo a SO: ( Abilitazione delle asserzioni in netbeans ), ( Asserzioni contro Eccezioni ), ( Quasi duplicato, richiesta di esempi ), ( Contenuto con un nome sbagliato, ma molto simile )





assert