【问题标题】:Groovy - formatting boolean expressionsGroovy - 格式化布尔表达式
【发布时间】:2012-06-02 08:48:15
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 以结束注释开头的行是注释行吗?此外,如果您不解析 groovy,则行可能以星号开头。
  • (实际上,至少在某些情况下,如果您也在解析 Groovy。)
  • 代码 sn-p 来自一个简单的脚本,用于计算我的项目的相关代码行(例如非空行和非注释行)。但是,我主要关心的是如何在不破坏语法规则的情况下格式化 Groovy 代码以提高可读性。代码 sn-p 应仅作为示例。
  • 我不明白为什么会有一个(!) 一个裸露的return 会被评估为它是什么;它在语法上是有效的。无论如何,请参阅我对一些 Groovier 选项的回答。

标签: groovy


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这个怎么样:

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

    【讨论】:

    • 其实我并不想知道如何更好地匹配注释行。问题是关于如何在不破坏 Groovy 语法的情况下格式化布尔表达式以提高可读性。包含的方法代码应仅作为示例。我应该编辑问题以使其更明显吗?
    猜你喜欢
    • 2016-07-13
    • 2016-02-20
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    相关资源
    最近更新 更多