2

我刚刚尝试编写我的第一个 Groovy 脚本,并注意到以下方法无法正常工作(至少乍一看)。

boolean isComment(String line)
{
    line = line.trim();
    return
        line.startsWith('//') ||
        line.startsWith('/*') ||
        line.startsWith('*') ||
        line.startsWith('*/');
}

我意识到(由于分号在 Groovy 中是可选的)方法体实际上是:

  1. 对“line”变量的赋值。
  2. 一个空的返回语句 (!),其计算结果为 false。
  3. 其他四个(不可访问的)独立语句。

对我来说,无法格式化表达式以提高可读性似乎是一个很大的缺点。

表达这种方法的正确 Groovy 方法是什么?

4

2 回答 2

3

除了没有实际指示注释行的逻辑之外,最简单的是:

boolean isComment(String line) {
  line = line.trim()
  return line.startsWith('//') ||
         line.startsWith('/*') ||
         line.startsWith('*')  ||
         line.startsWith('*/')
}

无论如何,IMO 更容易快速理解。

跳过不必要的返回也消除了这个问题:

boolean isComment(String line) {
  line = line.trim()

  line.startsWith('//') ||
  line.startsWith('/*') ||
  line.startsWith('*')  ||
  line.startsWith('*/')
}

另一种选择是将条件包装在括号中:

boolean isComment(String line) {
  line = line.trim()
  return (
    line.startsWith('//') ||
    line.startsWith('/*') ||
    line.startsWith('*')  ||
    line.startsWith('*/')
  )
}

另一种选择是使用更接近此的东西:

def boolean isComment(String line) {
  line = line.trim()
  ['//', '/*', '*', '*/'].any { 
    line.startsWith(it)
  }
}
于 2012-06-02T15:09:41.293 回答
0

这个怎么样:

boolean isComment(String line) {
  line ==~ /^\s*(\/\/|\/\*|\*).*$/
}
于 2012-06-02T12:45:49.620 回答