17

このGroovyコードを書くためのより「Groovy」な方法はありますか?

def myVar=(System.getProperty("props") == null)?
    null : System.getProperty("props")

ロジックは次のとおりです。

  • が NULL の場合System.getProperty("props")、NULL になりたいですprops
  • propsそうでなければ、私はの値になりたいSystem.getProperty("props")
4

1 に答える 1

42

通常、null チェック?:の場合、(elvis 演算子、左側が null の場合は既定値を返す、または false に解決される) または?.(安全なナビゲーション、左側が null の場合は null に評価される) に到達します。プロパティが存在しないときに使用するデフォルト値を設定する場合は、次のようにします。

def myVar = System.properties['props'] ?: 'mydefaultvalue'

キー「props」の System.properties に何も見つからない場合 (または返された値が false に解決される場合)、myVar を「mydefaultvalue」に設定します。しかし、あなたの場合のデフォルト値は null であるため、

def myVar = System.properties['props']

指定されたキーに対して何も見つからない場合は null が返されるため、同様に機能します。

ここでのGroovy化は次のとおりです。

  • GroovyString 補間が必要ない場合は、二重引用符よりも一重引用符で囲まれた文字列を優先します

  • マップとリストには ('get' または 'put' の代わりに) ブラケット付きインデックス構文を使用します。

  • getter が引数を持たない場合は短縮されたプロパティ形式(プレフィックスなし) を使用しgetます (Java とは異なり、Groovy はユニバーサル アクセスの原則を実装しています)。System.getProperty(String)Java プログラマーにとっては便利ですが、Groovy では必要ありません

  • default-if-null ケースを短くする?:

このイディオムは JavaScript で次のように使用されています||

def myVar = System.properties['props'] || 'mydefaultvalue'

Groovy では動作しません。ブール値テストの結果はブール値であるため、myVar は true に設定されます。

于 2014-07-30T14:42:31.607 に答える