2012-08-02 93 views
2

如果我有两个代码块,我想在两者之间切换(比如,用于测试目的),我已经意识到,你可以使用这样的评论:有没有更好的方法来切换注释代码?

//* 
<chunk #1, active code here> 
//*/ 

/* 
<chunk #2, commented out code here> 
//*/ 

然后在它们之间切换我需要在#2之上添加/并从#1之上删除/。我知道IDE的“切换评论”命令,但我认为这是更快,更不麻烦。

/* 
<chunk #1, active code here> 
//*/ 

//* 
<chunk #2, commented out code here> 
//*/ 

显然,这工作,因为该行注释实际上注释掉/*所以块注释不会被解析,并为年底同样的事情在//实际上注释掉*/

我的问题是,如果有更好的方式做这样的评论,或者如果这种方法是'光滑',你可以得到评论?

+3

whats slicker then 2 keystrokes? – hackattack 2012-08-02 22:11:36

+0

@hackattack如果您在多个类中都有调试代码,则这不仅需要2次按键操作。 – 2012-08-02 22:13:59

+2

@hackattack:1击键。 – 2012-08-02 22:22:54

回答

7

让我开始说我认为使用神秘系统的斜杠和星号来切换代码是邪恶的,但我们仍然试试这个。

首先块选择

//* 
public static void doStuff() 
{ 
    System.out.println("foo"); 
} 
/*/ 
public static void doStuff() 
{ 
    System.out.println("bar"); 
} 
//*/ 

第二块中选择(唯一的变化是去除第一斜线):

/* 
public static void doStuff() 
{ 
    System.out.println("foo"); 
} 
/*/ 
public static void doStuff() 
{ 
    System.out.println("bar"); 
} 
//*/ 

它的工作原理是因为在中间的哪个功能/*/的不管是打开还是关闭注释块,取决于是否存在已打开的注释块。

它与您自己的方法类似,但优点是您可以切换只更改一个字符,而不必更改两个字符。所以这是一个稍微更有效的做法。

+0

对于您的解决方案的纯粹邪恶而言+1。 – biziclop 2012-08-02 22:20:04

+0

美丽,我可能会开始使用这个! – WOUNDEDStevenJones 2012-08-02 23:10:12

2

一种方法是这样的:

public class DebugOptions { 
    public static final boolean DEBUG_FLAG = true; 
}; 

然后你的函数里面,你可以有这样的代码:

if(DebugOptions.DEBUG_FLAG) { 
    // Do some debugging stuff 
} else { 
    // Do something else 
} 

或者,每个类都可以有自己的旗帜,但图案是一样的。此外,您可能希望有多个标志或enum来提供不同级别的调试服务。

当您将布尔标志设置为false时,大多数编译器会优化掉任何未执行的代码。

+0

我不认为最后一点是真实的,事实上我相当肯定它不是。通过'private static final'标志,它是。无论哪种方式,JIT编译器都会最终摆脱它。 – biziclop 2012-08-02 22:17:10

+0

@biziclop感谢您的澄清。我在C++和Java之间跳得太多,所以当它们在两种语言之间有所不同时,我会弄到一些这些细节。 – 2012-08-02 22:21:16

+0

是的,我可以想象它不容易。问题的关键在于,如果常量在另一个文件中,那么没有任何东西可以阻止某个人改变它的值并重新编译该文件。所以编译器不能确定常量的值在运行时是否相同。 – biziclop 2012-08-02 22:33:09

0

凌乱,你的代码是不可读的。使用IDE功能时,需要按热键两次。 1或2秒它不是一个经济。

更好的调试方法,使包装方法,允许在时间取决于param工作的方法之一。

void debug(Mode m) { 
    switch m : { 
    case M1: method1(); 
    case M2: method2(); 
    ... 
    } 
} 

在代码debug(M1)中调用它。 如果你真的关心速度,你只需要从2改变1。

相关问题