Groovy - 格式化布尔表达式

时间:2012-06-02 08:48:15

标签: groovy

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

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

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

  1. 对“line”变量的赋值。
  2. 一个空的return语句(!),其结果为false并返回false。
  3. 其他四个(不可到达的)独立陈述。
  4. 对我来说,无法格式化表达式以提高可读性似乎是一个很大的缺点。

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

2 个答案:

答案 0 :(得分:2)

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

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('*/')
}

另一个选择是将条件包装在parens中:

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)
  }
}

答案 1 :(得分:0)

这个怎么样:

boolean isComment(String line) {
  line ==~ /^\s*(\/\/|\/\*|\*).*$/
}