当メモは2008-12-11に投稿されたものを加筆修正し、再掲したものです。
当初の掲載からだいぶ時間が経過していますので、古い内容のものもあると思いますのでご注意下さい。
順次アップデートしていく予定です。
目次
はじめに
Groovyではループ処理がJavaより格段に便利になっている。ということでメモしておきます。
以下ソースはいずれも Groovy Version: 3.0.7 で動作確認を行いました。
forループ
昔ながらの
def array = [0, 1, 2, 3, 4] for (int i = 0; i < array.size(); i++) { assert array[i] == i }
for-inでループ
コレクションのループ
def array = [0, 1, 2, 3, 4] def nums = '' for (i in array) { nums += i } assert nums == '01234'
範囲(Range)でループ
def nums = '' // 0〜4 for (i in 0..4) { nums += i } assert nums == '01234' nums = '' // 0〜5より小さい for (i in 0..<5) { nums += i } assert nums == '01234' nums = '' // 4〜0 (逆範囲) for (i in 4..0) { nums += i } assert nums == '43210' nums = '' // 4〜0より大きい (逆範囲) for (i in 4..<0) { nums += i } assert nums == '4321'
- 一番最後のRangeの逆範囲に対しても、
<
が有効なのがユニークですね😉
クロージャでループ
コレクションをループ
def array = [0, 1, 2, 3, 4] def nums = '' // 各要素ごとに繰り返し array.each { nums += it } assert nums == '01234' nums = '' // 各要素ごとに逆順で繰り返し array.reverseEach { nums += it } assert nums == '43210'
範囲(Range)を利用して
def nums = '' // 範囲を直接eachで回す (0..4).each { nums += it } assert nums == '01234' // 範囲はIntRangeクラス def r = new IntRange(0, 4) assert r == 0..4 nums = '' r.each { nums += it } assert nums == '01234'
繰り返し用のメソッドでループ
times
def nums = '' 10.times { nums += it } assert nums == '0123456789'
upto, downto
def nums = '' 0.upto(9) { nums += it } assert nums == '0123456789' nums = '' 9.downto(0) { nums += it } assert nums == '9876543210'
step
def nums = '' 0.step(8, 2) { nums += it } assert '02468'