【问题标题】:Is there a better way to toggle commented code?有没有更好的方法来切换注释代码?
【发布时间】:2012-08-02 22:07:32
【问题描述】:

如果我有两个代码块并且我想在它们之间切换(例如,出于测试目的),我意识到您可以使用这样的注释:

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

这显然是可行的,因为行注释实际上排除了/*,因此块注释没有被解析,而// 实际上排除了*/ 的结尾也是如此。

我的问题是,是否有更好的方法来使用 cmets 做类似的事情,或者这种方法是否像评论一样“流畅”?

【问题讨论】:

  • 2 次击键有什么更流畅的?
  • @hackattack 如果您在多个类中调试代码,这需要的不仅仅是 2 次击键。

标签: java comments line toggle block


【解决方案1】:

首先让我说,我认为使用神秘的斜线和星号系统来切换代码是邪恶的,但我们还是试试吧。

选择的第一个区块

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

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

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

【讨论】:

  • 漂亮,我可能会开始使用这个!
【解决方案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 时,大多数编译器会优化掉所有未执行的代码。

【讨论】:

  • 我不认为最后一点是真的,事实上我有理由确定它不是。使用private static final 标志,它是。无论哪种方式,JIT 编译器最终都会摆脱它。
  • @biziclop 感谢您的澄清。我在 C++ 和 Java 之间跳的太多了,所以当这两种语言之间存在差异时,我会混淆其中的一些细节。
  • 是的,我可以想象这并不容易。真正的关键是,如果常量在另一个文件中,则没有什么可以阻止某人更改其值并仅重新编译该文件。所以编译器无法确定常量的值在运行时是否相同。
  • @biziclop 是的,这很有道理。
  • 这是有道理的,但不幸的是它不是这样工作的。 public static final 常量实际上也内联在其他文件中。更改值,然后仅重新编译包含该常量的文件,不会更新使用它的文件中的值。
【解决方案3】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 2023-04-11
    • 1970-01-01
    • 2016-10-26
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多