作者: ZDNET CHINA 特稿
调试代码的程序开发设计人员有时会希望较好的修改他们的程序代码或者注释出很长一段的程序。而能够帮助这些程序设计人员完成这个目的的语句就是if(true)以及if(false)语句。
通常的,程序员使用/* */来注释他们所编写的程序语句。然而,在某些特定的情况下,使用if(false)语句是一种简便的方法。下面我们来看看例子:
Iteratoritr = something.callMethod();
while(itr.hasNext()) {
doThings(itr);
}
something.close();
这上面的这个程序片断中,可以通过使用if (false)语句来轻松的注释出有哪些部分使用来做while loop循环的。在while loop语句内包含的任何/* */注释都不会对我们加入的这条语句有任何的影响。只需简单的加入if (false),比如:
Iteratoritr = something.callMethod();
if(false)
while(itr.hasNext()) {
doThings(itr);
}
something.close();
if(false)语句同 if(true)语句搭档使用会产生更好的效果。在下面的程序代码中,a whole host of methods正在被调用:
public void someMethod(Object obj) {
doFirst(obj);
doSecond(obj);
doThird(obj);
doFourth(obj);
doFifth(obj);
....
}
为了在第二个方法被调用之后注释出所有的事,程序设计人员可以使用/* */来注释,也能够通过使用if(false) { .... }语句来注释。但是,假如程序员想在RETURN(返回)中加入注释又怎么解决呢?请看下面的例子:
public void someMethod(Object obj) {
doFirst(obj);
doSecond(obj);
return;
doThird(obj);
doFourth(obj);
doFifth(obj);
....
}
很不幸,这不能被编译成:
///// Javac:
code/ComplexTest.java:15: unreachable statement
Complex c = new Complex(3,4);
^
1 error
///// jikes:
Found 1 semantic error compiling "code/ComplexTest.java":
〈-----------------------------
15. Complex c = new Complex(3,4);
. . .
18. System.out.println(Complex.conjugate(c));
------------------------------------------------〉
*** Error: These statements are unreachable.
然而,if(true)欺骗了编译器,并让编译器认为下列的这些是合法的:
public void someMethod(Object obj) {
doFirst(obj);
doSecond(obj);
if(true) return;
doThird(obj);
doFourth(obj);
doFifth(obj);
....
}
if(true)语句也能在for loop 或者 while loop中编写声明。
结论
if(true)以及 if(false)语句在程序逻辑中是多余的,但是JAVA编译器把它们还是当作合法的语句对待的。因此,它们能够被用来帮助注释程序。在知道了它们的用处之后,在程序设计人员编制程序的时候,可以给调试者们以更多的选择。