こんにちは!なるーらぼです。前回はコレクションでも2番目によく使うであろう、マップについてみていきました。今回はコレクションの最後、レンジです。
レンジは範囲を表すオブジェクトの集合です。範囲ということなので、順番にならんでいるという点ではリストと似ています。というのも、リストを拡張したものがレンジだからです。
レンジ
レンジをリテラルで宣言するには、「..」というドット記号が2つ並んだものを値の最初と最後に間に記述します。こんな感じです。
def range = 1..8
こうすると、1から8までが並んだコレクションが出来上がります。ということは、先ほどの変数rangeのサイズは8となりますよね。
assert range.size() == 8
もう大体わかってしまったかもしれません。リストでもあるので、リストと同様に操作することができます。さらにもうひとつ、宣言する方法があります。それは範囲の片方のを不等号で表す記述方法です。例えば、さきほどは1から8としましたが、8を含めないようにするには次のようにします。
def range = 1..<8
こうすると8未満までの範囲でレンジが作成されます。
なお、レンジがどこから始まっていて、どこで終わっているかを知るために「from」そして「to」というプロパティが用意されています。
assert range.from == 1
assert range.to == 7
ところで、レンジは数値だけにしか使えないかというとそうでもありません。「java.lang.Comparable」インターフェースが実装されている、「previous」「next」メソッドをもつオブジェクトであればレンジにすることができます。ですから、文字列もレンジにすることができます。
def range = 'a'..'z'
上記で「a」から「z」までの文字列がリストになりました。このあたりもrubyなどから多大な影響を受けているように思いますね。
そうすると…?rubyでは次のようなコードを書くことができます。
(1..10).each do |i|
puts i
end
これは1から10までを連続して出力するコードになります。もしかして同じものがGroovyでも・・・?そうです、できますよ!
for(i in 1..10) {
println i
}
あら?ちょっとrubyっぽくありませんね。こうしてみましょう。
(1..10).each { i ->
println i
}
それはそうですね!だってリストなのですから!!
最後に
今回はレンジについてみてきました。リストのおさらいにもなってよいですね。
これでコレクションは終わりです。次回からはGroovyの制御構文についてみていきましょう。
0コメント