2012-06-02 48 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語法的情況下對布爾表達式進行格式化以提高可讀性。包含的方法代碼應該只是一個例子。我應該編輯這個問題,使其更加明顯嗎? –