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>
//*/

这显然有效,因为行注释实际上注释掉了/*所以块注释没有被解析,并且//实际上注释掉*/.

我的问题是,是否有更好的方法来做这样的评论,或者这种方法是否像评论一样“巧妙”?

4

3 回答 3

8

首先让我说我认为使用斜线和星号的神秘系统来切换代码是邪恶的,但无论如何让我们尝试一下。

选择的第一个块

//*
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");
}
//*/

它之所以起作用,是因为/*/中间的它可以作为打开或关闭注释块的功能,具体取决于是否存在已打开的注释块。

它类似于您自己的方法,但优点是您可以通过仅更改单个字符来切换,而不必更改两个字符。所以这是一种更有效的作恶方式。

于 2012-08-02T22:18:53.760 回答
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 时,大多数编译器将优化掉任何未执行的代码。

于 2012-08-02T22:12:24.357 回答
0

乱七八糟,你的代码不可读。使用 IDE 功能,它需要按两次热键。1或2秒这不是经济。

更好的调试方法具有包装器方法,该方法允许根据参数有时使用其中一种方法。

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

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

于 2012-08-02T22:19:11.987 回答