Assertion
Från SDK 1.4 finns assertions i Java. Liksom i C är det en mekanism
för att kolla om ett villkor är sant och avbryta exekveringen (eventuellt
även skriva ut ett meddelande) om det inte är sant.
Hur fungerar assertions?
Kod
Syntaxen är assert <boolean statement> eller assert
<boolean statement> : <message>. Om <boolean statement>
är sant händer ingenting. Om det är fel avbryts exekveringen.
Om <message> har angivits skrivs det ut. <message>
måste vara en String eller en primitiv typ. Koden
assert <boolean statement> : <message>
fungerar ungefär som
if (!<boolean statement>) {
throw new AssertionError(<message>);
}
Exekvering
För att använda assertions måste programmet kompileras med
switchen -source 1.4. Assertions kan sättas på och stängas
av vid exekvering, default är de avstängda vilket innebär att
de inte påverkar exekveringen. Switchen -ea sätter på
assertions. Det går också att sätta på assertions för
bara en viss klass (-ea:<class name>), för ett visst
paket (-ea:<package name>...) och för systemklasser (-esa).
Här kommer ett litet program bara för att testa att det fungerar,
TestAssertion.java. Kompilera det med javac
-source 1.4 TestAssertions.java och exekvera det med java -ea
TestAssertions. Om det funkar kastas ett AssertionError och texten Assertions
are enabled skrivs ut. Om det inte funkar blir det inget undantag och
i stället skrivs texten Assertions are not enabled.
När ska assertions användas?
Assertions är enbart ett debug-hjälpmedel. En kort och enkel (och
grov) regel är att assertions ska enbart användas vid
utveckling för att kolla antaganden som tas för givna. Ett
exempel är att vi i en metod som beräknar kvadratroten av ett tal
kan kolla att inparametern inte är negativ. Mer detaljerade riktlinjer
för användandet kommer här:
Använd assertions för att:
Använd inte assertions för att:
- Kolla kommandoradsargument.
- Kolla inparametrar till publika metoder.
- Ersätta undantag (varken Exception eller RuntimeException).
- Utföra något som ger bestående effekt. Det får
alltså inte påverka programmet om uttrycket <boolean expression>
exekveras eller ej.