2

私は初めて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の方法は何ですか?

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 に答える