No Programming, No Life

プログラミング関連の話題や雑記

GroovyのBooleanテストの評価

忘れそうなのでメモ。出典はGroovy イン・アクション(P130,131)

Booleanテストで使われるルールの順番

実行時の真 判定される基準
Boolean 値がtrue
Matcher マッチする
Collection コレクションが空ではない
Map マップが空ではない
String, GString 文字列が空ではない
Number, Character 値がゼロではない
上記以外 参照がnullではない

テストの例

// Boolean値は自明
assert true
assert !false

// Matcherはマッチすること
assert ('a' =~ /./)
assert !('a' =~ /b/)

// コレクションは空ではないこと
assert [1]
assert ![]

// マップは空ではないこと
assert ['a':1]
assert ![:]

// 文字列は空ではないこと
assert 'a'
assert !''

// 数値(どの型も)はゼロではないこと
assert 1
assert 1.1
assert 1.2f
assert 1.3g
assert 2L
assert 3G
assert !0

// その他は、すべてnullではないこと
assert new Object()
assert !null

使用例

例えば、リストが空になるまで繰り返す処理なんかを書くときに、List#isEmpty()とかで判定しなくてよくなります。

def list = [1, 2, 3, 4, 5]
while (list) { // リストが空でない間繰り返す
  println list
  list = list.tail()
}
実行結果


[1, 2, 3, 4, 5]
[2, 3, 4, 5]
[3, 4, 5]
[4, 5]
[5]

(動作確認: Groovy Version: 1.5.7 JVM: 1.6.0_10)

参考

Groovyイン・アクション

Groovyイン・アクション