$B%"%5!<%7%g%s(B

Revised: Apr./25th/2004; Since: Apr./24th/2004

$B%"%5!<%7%g%s!JI=L@!K$O%*%V%8%'%/%H;X8~$N35G0$N0l$D$G$9!#(B Bertrand Meyer $B$H$$$&?M$,!"(BEiffel $B$H$$$&8@8l$G$B7@Ls$K4p$E$/@_7W(B (DbC: Design by Contract) $B$G:NMQ$7$?%"%5!<%7%g%s5!G=$,$h$/CN$i$l$F$$$^$9!#(BJava $B$G$O(B J2SE 1.4 $B$G8@8l;EMM$K

$B%"%5!<%7%g%s$H$O2?$+(B

$B%"%5!<%7%g%s(B$B$O!"%W%m%0%i%`$N;EMM$r%=!<%9%3!<%I$KL@5-$9$k$b$N$G$9!#6qBNE*$K$O!"%W%m%0%i%`$Nl9g$r(B false $B$H$9$k(B boolean $B<0$r4^$_!"2>$K(B false $B$K$J$k$h$&$J$i(B java.lang.AssertionError $B$rH/@8$5$;$^$9!#(BAssertionError $B$,H/@8$9$k>l9g$O!"%W%m%0%i%`$,M=4|$7$J$$F0:n$r

$B%"%5!<%7%g%s$O9T$H$7$F5-=R$7$F!"%A%'%C%/%]%$%s%H$NLr3d$r2L$?$7$^$9!#6KO@$9$l$P!"%A%'%C%/%]%$%s%H4V$r7k$V$N$,@)8f$G$9!#2?$i$+$N=hM}$NA0$K5-=R$9$l$P;vA0>r7o$r%A%'%C%/$7!"8e$J$i$P;v8e>r7o$r%A%'%C%/$G$-$^$9!#=hM}$K0MB8$7$J$$%/%i%98GM-$NITJQ>r7o$b!"$"$j$($J$$JQ?tCM!"E~C#$9$k$O$:$N$J$$@)8f$H$7$F%A%'%C%/2DG=$G$9!#(B

$B%"%5!<%7%g%s$N%7%s%?%C%/%9(B

Java $B$N8@8l;EMM$G:NMQ$5$l$?%"%5!<%7%g%s5!G=$O6K$a$F%7%s%W%k$G$9!#?7$7$/DI2C$5$l$?%-!<%o!<%I(B "assert" $B$r;H$$!"%7%s%?%C%/%9$O

assert Expression1 ;
assert Expression1 : Expression2 ;

$B$$$:$l$N>l9g$b!"(BExpression1 $B$O(B boolean $BCM(B (true/false) $B$rJV$9<0$G$9!#(BExpression2 $B$OCM$rJV$9G$0U$N<0$G!"CM$O(B AssertionError $B$N%3%s%9%H%i%/%?0z?t$K$J$j$^$9$9!#$3$NCM$NJ8;zNsI=8=$,>\:Y%a%C%;!<%8$K;H$o$l!"DL>o$O!"JQ?t$NCM$J$I$N!"%G%P%C%0$KLrN)$D%H%l!<%9>pJs$r5-=R$7$^$9!#(B

// x $B$,(B null $B$@$H(B AssertionError
assert x != null;

// y $B$,(B $BIi$@$H(B AssertionError
// $B>\:Y%a%C%;!<%8$O(B "y = " + y
assert y >= 0: "y = " + y;

$B%"%5!<%7%g%s$rE,@Z$K5-=R$9$k>l9g!"%"%5!<%7%g%s$,DL$l$P!"$=$NE@$^$G$N@)8f$O0U?^$I$*$j$KDL$C$F$$$k$3$H$r3NG'$G$-$?$3$H$K$J$j$^$9!#%"%5!<%7%g%s$O!"%A%'%C%/%]%$%s%H$NLr3d$r2L$?$7$^$9!#%"%5!<%7%g%s>r7o$O!"E,@Z$KF0:n$7$F$$$l$P@.8y$9$k>r7o$r5-=R$9$k$N$G!"%G%P%C%0:Q$_$N40@.$7$?%3!<%I$O!"M-8z!?L58z$K4X$o$i$:F0:n$KJQ2=$,$J$$$h$&$K$7$^$9!#(B

$B%"%5!<%7%g%s$r%3%s%Q%$%k;~$KM-8z$K$9$k$K$O!"%3%^%s%I(B "javac" $B$K%U%i%0(B "-source 1.4" $B$r;XDj$7$^$9!#java" $B$K%U%i%0(B "-ea" $B$J$I$r;XDj$7$^$9!#(B

$B%"%5!<%7%g%s$N%3%s%Q%$%k(B

$B%"%5!<%7%g%s$O!"%G%U%)%k%H$G$OL58z$K$J$C$F$$$^$9!#%3%s%Q%$%k;~$K!"(B"assert" $B$r%-!<%o!<%I$K$9$k$+$I$&$+;XDj$9$k%U%i%0$,$"$j$^$9!#(B

javac $B%3%^%s%I$N%"%5!<%7%g%s%U%i%0!'(B

>javac -source 1.4 MyClass  // assert $B$r%-!<%o!<%I$H$7$FG'<1$9$k(B
>javac -source 1.3 MyClass  // assert $B$r%-!<%o!<%I$H$7$FG'<1$7$J$$(B

SDK 1.4 $B$G$N%G%U%)%k%H$O(B "-source 1.3" $B$G$9!#%G%U%)%k%H$N>l9g$O!"$=$N%=!<%9%3!<%I$NCf$G%"%5!<%7%g%s5!G=$,L58z$H9M$($i$l!"(B"assert" $B$,<1JL;R!?%i%Y%k$H$7$F;H$o$l$F$$$F$b!"7Y9p$O$5$l$^$9$,%3%s%Q%$%k$5$l$^$9!#0lJ}!"(B"-source 1.4" $B$r;XDj$9$k$H!"%"%5!<%7%g%s5!G=$,M-8z$H9M$($i$l!"%(%i!<$H$J$C$F%/%i%9%U%!%$%k$b@8@.$5$l$^$;$s!#(B

$B<1JL;R$H$7$F;H$C$?>l9g(B

$B%*%W%7%g%s$r$D$1$:$K!"(B"assert" $B$r<1JL;R$d%i%Y%k$K;H$C$?%W%m%0%i%`$r%3%s%Q%$%k$9$k$H!"!V7Y9p!W$O$5$l$^$9$,!"%(%i!<$G$O$J$/!"%3%s%Q%$%k$O@.8y$7$^$9!#(B"-source 1.4" $B$r;XDj$7$?>l9g$O!"!V%(%i!

$B%*%W%7%g%s$J$7(B (-source 1.3)$B!'%3%s%Q%$%k@.8y!J7Y9p!K(B
C:\java>javac AssertionKeyword.java
AssertionKeyword.java:3: $B7Y9p(B: $B%j%j!<%9(B 1.4 $B$G$O(B assert $B$O%-!<%o!<%I$J$N$G<1JL;R(B
$B$H$7$F;H$&$3$H$O$G$-$^$;$s!#(B
                int assert = 10;
                    ^
$B7Y9p(B 1 $B8D(B

C:\java>dir /B AssertionKeyword.*
AssertionKeyword.class        <- $B%3%s%Q%$%k@.8y(B
AssertionKeyword.java
-source 1.4$B!'%3%s%Q%$%k<:GT!J%(%i!
C:\java>javac -source 1.4 AssertionKeyword.java
AssertionKeyword.java:3: $B%j%j!<%9(B 1.4 $B$G$O(B assert $B$O%-!<%o!<%I$J$N$G<1JL;R$H$7$F(B
$B;H$&$3$H$O$G$-$^$;$s!#(B
                int assert = 10;
                    ^
$B%(%i!<(B 1 $B8D(B

$B%"%5!<%7%g%s5!G=$r;H$C$?>l9g(B

$B5U$K!"%"%5!<%7%g%s5!G=$r5-=R$7$?>l9g$O!"%G%U%)%k%H$N>l9g$OL58z$J9=J8$r5-=R$7$?$3$H$K$J$j!"%(%i!<$H$J$j$^$9!#(B"-source 1.4" $B$r;H$&$H%3%s%Q%$%k$K@.8y$7!"7Y9p$,=P$5$l$^$;$s!#(B

$B%*%W%7%g%s$J$7(B (-source 1.3)$B!'%3%s%Q%$%k<:GT(B
C:\java>javac AssertionDemo.java
AssertionDemo.java:3: $B7Y9p(B: $B%j%j!<%9(B 1.4 $B$G$O(B assert $B$O%-!<%o!<%I$J$N$G<1JL;R$H(B
$B$7$F;H$&$3$H$O$G$-$^$;$s!#(B
                assert x >= 0;
                ^
AssertionDemo.java:3: ';' $B$,$"$j$^$;$s!#(B
                assert x >= 0;
                         ^
$B%(%i!<(B 1 $B8D(B
$B7Y9p(B 1 $B8D(B

C:\java>dir /b AssertionDemo.*
AssertionDemo.java        <- $B%3%s%Q%$%k$K<:GT$7!"%/%i%9$,@8@.$G$-$F$$$J$$(B
-source 1.4$B!'%3%s%Q%$%k@.8y(B
C:\java>javac -source 1.4 AssertionDemo.java

C:\java>dir /B AssertionDemo.*
AssertionDemo.class        <- $B%3%s%Q%$%k@.8y(B
AssertionDemo.java

$B%"%5!<%7%g%s$N

java $B%3%^%s%I$K$h$k

java $B%3%^%s%I$N%"%5!<%7%g%s%U%i%0!'(B

-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
              $B;XDj$7$?%/%i%9!?%Q%C%1!<%8$N%"%5!<%7%g%s$rM-8z$K$9$k(B
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
              $B;XDj$7$?%/%i%9!?%Q%C%1!<%8$N%"%5!<%7%g%s$rL58z$K$9$k(B
-esa | -enablesystemassertions
              $B%7%9%F%`%/%i%9!?%i%$%V%i%j$N%"%5!<%7%g%s$rM-8z$K$9$k(B
-dsa | -disablesystemassertions
              $B%7%9%F%`%/%i%9!?%i%$%V%i%j$N%"%5!<%7%g%s$rL58z$K$9$k(B

$B%T%j%*%I;0$D(B(...)$B$,%/%i%9L>$KBP$9$k%o%$%k%I%+!<%I$H$7$F5!G=$7$^$9!#(B

"-ea/-da" $B$N>l9g!"%/%i%9!?%Q%C%1!<%8L>$r;XDj$7$J$$$H!"A4$F$N%/%i%9%m!<%@!<$,A4$F$N%Q%C%1!<%8$KBP$7$F%"%5!<%7%g%s$rM-8z$K$7$F%/%i%9$r%m!<%I$7$^$9!#$3$N$H$-!"%7%9%F%`%i%$%V%i%j!J%3%"%Q%C%1!<%8(B"rt.jar"$B!K$O!"L@<(E*$J%/%i%9%m!<%@$r;}$?$J$$$N$G=|30$5$l$^$9!#%3%"%Q%C%1!<%8$N%"%5!<%7%g%s$bM-8z$K$7$?$$>l9g$O!"(B"-esa/-dsa" $B$rDI2C$7$F;XDj$7$^$9!#(B

$B%"%5!<%7%g%s$NNc(B

$B

class AssertionDemo {
	private static void verify(int x) {
		// x $B$,Ii$@$H%"%5!<%7%g%s%(%i!<(B
		assert x >= 0;
		System.out.println("x = " + x);
	}
	public static void main(String[] args) {
		int x = 0;
		verify(x);
		x = -1;
		verify(x);
	}
}

$B%G%U%)%k%H%*%W%7%g%s(B

$B%G%U%)%k%H$O(B "-da (disable assertions)" $B$G!"%"%5!<%7%g%s9T$O6u9T$HEy2A$G!"C1$KL5;k$5$l$^$9!#(B

C:\java>javac -source 1.4 AssertionDemo.java

C:\java>java AssertionDemo
x = 0
x = -1

$B$$$m$$$m$J%*%W%7%g%s$N;XDj(B

"-ea" $B$O!"%7%9%F%`%/%i%9$r=|$$$?!"A4$F$N%/%i%9$GM-8z$K$7$^$9!#(B"-ea:..." $B$H$9$k$H!"%G%U%)%k%H%Q%C%1!<%8!J%+%l%s%H%G%#%l%/%H%jFb$NL>A0$N$J$$%Q%C%1!<%8!KG[2<$NA4$F$N%/%i%9$N%"%5!<%7%g%s$,M-8z$K$J$j$^$9!#(B

C:\java>java -ea AssertionDemo
x = 0
Exception in thread "main" java.lang.AssertionError
        at AssertionDemo.verify(AssertionDemo.java:3)
        at AssertionDemo.main(AssertionDemo.java:10)

C:\java>java -ea:... AssertionDemo
x = 0
Exception in thread "main" java.lang.AssertionError
        at AssertionDemo.verify(AssertionDemo.java:3)
        at AssertionDemo.main(AssertionDemo.java:10)

$B%/%i%9(B com.msugai.MyClass $B$@$1$GM-8z$K$7$F!"%/%i%9(B MyClassDemo $B$r

>java -ea:com.msugai.MyClass MyClassDemo

$B>0!"$3$N$H$-!"(B"MyClassDemo" $B$+$i!"(B"com.msugai.MyClass" $B$,;H$o$l$k$+$I$&$+$O%A%'%C%/$5$l$^$;$s!#uBV$O!"%/%i%9%m!<%@!<$,J];}$9$k%F!<%V%k>e$N%U%i%0$G4IM}$5$l!"%m!<%I$7$?%/%i%9$N%U%i%0$,N)$C$F$$$k>l9g$O!"%/%i%9=i4|2=;~$K%"%5!<%7%g%s$,M-8z$K$J$j$^$9!#B8:_$7$J$$%/%i%9$N>l9g$O%m!<%I$5$l$J$$$7=i4|2=$b$5$l$J$$$@$1$G$9!#(B

$B%Q%C%1!<%8(B com.msugai $B$H$=$N%5%V%Q%C%1!<%8$KB0$9$kA4$F$N%/%i%9$G$@$1M-8z$K$9$k!'(B

>java -ea:com.msugai... MyClassDemo

$B%Q%C%1!<%8(B com.msugai $B$H$=$N%5%V%Q%C%1!<%8$KB0$9$kA4$F$N%/%i%9$@$1$GM-8z$K$9$k$,!"%/%i%9(B MyAltClass $B$G$OL58z$K$9$k!'(B

>java -ea:com.msugai... -da:com.msugai.MyAltClass MyClassDemo

assert $B<0(B1: $B<0(B2;

$B>e$K5s$2$?Nc$r

class AssertionDemo2 {
	private static void verify(int x) {
		// x $B$,Ii$@$H%"%5!<%7%g%s%(%i!<(B
		assert x >= 0: "x $B$O@5$G$J$1$l$P$J$i$J$$!*(B x = " + x;
	}
	public static void main(String[] args) {
		int x = 0;
		verify(x);
		x = -1;
		verify(x);
	}
}

"-source 1.4" $B$r$D$1$F%3%s%Q%$%k$7!"(B"-ea" $B$G%"%5!<%7%g%s$rM-8z$K$7$F

C:\java>javac -source 1.4 AssertionDemo2.java

C:\java>java -ea AssertionDemo2
Exception in thread "main" java.lang.AssertionError: x $B$O@5$G$J$1$l$P(B
$B$J$i$J$$!*(B x = -1
        at AssertionDemo2.verify(AssertionDemo2.java:4)
        at AssertionDemo2.main(AssertionDemo2.java:10)

$BNc30>pJs$K!";XDj$7$?%a%C%;!<%8$,4^$^$l$F$$$k$3$H$,J,$+$j$^$9!#(B

$BMxMQJ}K!(B

$B%"%5!<%7%g%s$O!"%3%a%s%H%l%Y%k$G5-:\$7$F$$$?%W%m%0%i%`$N;EMM$r!"8@8l;EMM%l%Y%k$GL@5-$7$?$b$N$G$9!#$"$k$$$O!":#$^$G$O(B if $BJ8$dNc30$N(B throw $B$GL@5-$7$F$$$?$b$N$r@)8f%U%m!<$+$iDI$$=P$9$b$N$G$9!#(B

$B35O@(B

$B%"%5!<%7%g%s$N4pK\E*$J;H$$J}$O%A%'%C%/%]%$%s%H$G$9!#%"%5!<%7%g%s>r7o$O!"$=$l$^$G$N=hM}$K%P%0$,:n$j9~$^$l$F$$$k>l9g$@$1<:GT$9$k$h$&$K$9$Y$-$G$9!#(B

$BNc$($P!"%U%!%$%k$N%*!<%W%s$r4^$`>l9g$O!"B>$N%9%l%C%I$d(B JVM $B30$N4D6-$K0MB8$7$F<:GT$9$k2DG=@-$,$"$k$N$G!"@)8f9=B$$GNc30=hM}$9$Y$-$G$9!#0lJ}!"%a%=%C%I0z?t$r%A%'%C%/$9$k>l9g!";vA0$K0z?t$NBEEv@-8!>Z$r9T$&>l9g$O!"@5$7$/0U?^$7$?$H$*$j$KF0:n$7$F$$$l$P!"IT@5$J%a%=%C%I0z?t$rM?$($k$O$:$,$J$$$N$G!"%"%5!<%7%g%s$G%A%'%C%/$9$k$3$H$,E,@Z$G$9!#(B

$BE57?E*$JNc$G$O!"

precondition
$B%a%=%C%I$N5/F0;~$N=i4|>r7o$N%A%'%C%/!#%a%=%C%I$N0z?t$Nr7o$N%A%'%C%/!#(B
postcondition
$B%a%=%C%I$N%j%?!<%sA0$N=*N;>r7o$N%A%'%C%/!#%j%=!<%9$N2rJ|$d%U%i%0$N%*%U!"%;%C%H$7$?%G!<%?$NHO0O$J$I!"=hM}$N
invariant
$B$"$j$($J$$>r7o$N%A%'%C%/!#40A4$KGSB>E*$G$"$k$Y$-9T$dCM$J$I!"@5>o$KF0:n$7$F$$$l$P$"$j$($J$$>r7o$r3NG'$9$k$?$a$N%A%'%C%/!#(B

$B%a%=%C%I0z?t$N%A%'%C%/(B

$BNc$($P!"%a%=%C%I$,G[Ns$rl9g$r%A%'%C%/$9$k$?$a$K

void getVlas(String[] args) throws IllegalArgumentException {
	if (args.length == 0) {
		throw new IllegalArgumentException();
	}
	...
}

throw $B$9$kNc30$N

$B%a%=%C%I8F$S=P$7A0$K0z?t$NBEEv@-8!>Z$r9T$&$J$I$7$F!"IT@5$J0z?t$rM?$($J$$$h$&$J@_7W$r0U?^$7$F$$$k>l9g$O!"@)8f9=B$$G%A%'%C%/$9$k$N$O>iD9$G$9!#K\HV2TF08e$b$3$N%3!<%I$O;D$j!"%3%s%T%e!<%?@)8f$OI,$:$3$NL50UL#$J>r7oJ,4t%m%8%C%/$rDL$k$3$H$K$J$j$^$9!#%"%5!<%7%g%s$r;H$&$H!"K\HV2TF0;~$K$O%"%5!<%7%g%s$rL58z$K$9$k(B "-da" $B$G

$B$^$?!"1>$&$^$G$b$J$/!"Nc30$r%9%m!<$9$k$N$OEv3:%a%=%C%IFbIt$+$i$J$N$G!"8F$S=P$785$NEv3:%a%=%C%I$N%/%i%$%"%s%H!&%3!<%I$K$H$C$F$O8e$N:W$j$G$9!#%"%5!<%7%g%s$r;H$($P!"%a%=%C%I8F$S=P$7A0$K!"0z?t$NBEEv@-$N%A%'%C%/$,9T$($^$9!#BEEv$G$J$$CM$rM?$($h$&$H$9$k$J$i$P!"$=$l$^$G$N=hM}$K%P%0$,$"$k$H$_$J$9$3$H$,$G$-$^$9!#BEEv@-8!>Z$r!"8F$S=P$785$+$i0l3,AX>e$K0Q>y$9$k$3$H$,2DG=$K$J$k$N$G$9!#(B

$B>e5-$N%3!<%I$rC1=c$KCV$-49$($k$@$1$J$i$P!"

void getVlas(String[] args) {
	// $B0z?t$,6u$G$"$k$3$H$O$"$j$($J$$$O$:(B
	assert args.length != 0;
	...
}

$BEv3:%a%=%C%I$rDs6!$9$kB&$K$7$F$_$l$P!"Nc30$r%9%m!<$7$F$b%"%5!<%7%g%s$r;H$C$F$b!"8F$S=P$785!J%/%i%$%"%s%H!&%3!<%I!K$KBP$9$k0U;WI=<($H$7$F$OJQ$o$j$J$$$+$b$7$l$^$;$s!#0lJ}!"Ev3:%a%=%C%I$rMxMQ$9$kB&!J%/%i%$%"%s%H!&%3!<%I!K$+$i$9$k$H!"Ev3:%a%=%C%I8F$S=P$7A0$K!"%"%5!<%7%g%s$r5-=R$9$k$3$H$G!"%a%=%C%I0z?tBeF~$9$kCM$NBEEv@-8!>Z$,9T$($k$N$,%a%j%C%H$K$J$j$^$9!#Ev3:%a%=%C%I$N3+H/Z$,9T$($k$N$G!"$=$l$^$G$N@)8f$NBEEv@-$r%A%'%C%/$9$k$N$KLrN)$F$i$l$k$o$1$G$9!#(B

$B>e$N%3!<%I$NNc$N>l9g!"Ev3:%a%=%C%I$N8F$S=P$785$G$O!"

// $BG[Ns(B args $B$,6u$G$"$k$O$:$,$J$$(B
assert args.length !=0;
obj.getVals(args);

$B%9%l%C%I$N%m%C%/>uBV$N%A%'%C%/(B

Sun $B$N%I%-%e%a%s%H(B$B$K$O4v$D$+$NNc$,:\$C$F$$$k$^$9$,!"(B$B%9%l%C%I(B$B$,%m%C%/$rJ];}$7$F$$$k$3$H$N%A%'%C%/$O:G$bM-0U5A$J$b$N$N0l$D$G$7$g$&!#(B

java.lang.Thread $B$N(B holdsLock() $B$HAH$_9g$o$;$F!"%m%C%/$rJ];}$7$F$$$k$+$I$&$+$r%"%5!<%7%g%s$G%A%'%C%/$7$F$$$^$9!#$J$s$i$+$N%m%8%C%/ITHw$K$h$j!"%m%C%/AssertionError $B$,H/@8$7$^$9!#(B

private int find(Object key, Object[] arr, int start, int len) {
	// $B8=9T%9%l%C%I$O;XDj$5$l$?%m%C%/$r$9$G$KJ];}$7$F$$$k$O$:(B
	assert Thread.holdsLock(this);
	...
}


Copyright © 2004 SUGAI, Manabu. All Rights Reserved.
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送