2012-06-02 47 views
1

我刚刚尝试编写我的第一篇Groovy脚本,并注意到下面的方法不能像我期望的那样工作(至少在第一眼看来)。Groovy - 格式化布尔表达式

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

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

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

对我来说,为了提高可读性而无法格式化表达式似乎是一个相当大的缺点。

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

+0

是否以结束评论开始评论行?另外,如果你不解析groovy,一行可能以星号开头。 –

+0

(实际上,至少在某些情况下,如果您解析Groovy的话)。 –

+0

代码片段来自一个简单的脚本,用于统计我的项目的相关代码行(例如非空行和非注释行)。不过,我最关心的是如何在不破坏语法规则的情况下对Groovy代码进行可读性格式化。代码片段应该只是一个例子。 –

回答

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

另一种办法是来包装条件中的括号:

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

如何:

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

其实我并不想知道如何以更好的方式匹配注释行。问题在于如何在不破坏Groovy语法的情况下对布尔表达式进行格式化以提高可读性。包含的方法代码应该只是一个例子。我应该编辑这个问题,使其更加明显吗? –