プログラマメモ2 - programmer no memo2

groovy 基本ループとか 2007/08/22
2007/08/23

やはりループを押さえておこうということで、




groovyのような言語な柔らかい(!?)言語を使っていくのなら、
ループの書き方を知ったうえで、自分なりのコーディングルールを作っていったほうがよいのかも。

// for 1~100
for (i in 1..100) { println i }
//while 1~99
i = 1
while (i <= 100) { println i; i++ }
//each 1~100
(1..100).each { println it }
//times 0~99
100.times { println it }
// upto 1~100
1.upto(100) { println it }
// step 1~100
1.step(101, 1) { println it }


for (i in 1..100)が好きかもしれない。(1..100).each {}の書き方も好き。
ただ、書いているときはいいのだが、().eash{}はちょっとわかりづらいかもしれない。
なので、やはりjavaでなれたfor( in )を使うようにしようと思う。

100.times
は数字もオブジェクトという感じがしていいかもしれない。でも、timesが回数というのを押さえた上で0からはじまって100回を押さえておく。

upto,stepは自分的には使わないだろうなぁ。

と思って調べていくと、おもしろい使い方発見!!
result = (1..10).step(2).join(',')
println result


まさに、2刻み(step)で動くわけだ。

Rangesは".."で記述する。このRangesはたしかに直感的だよね。
※Rangesは単にRange(s)です。

Rangesの定義を別にループの宣言部分でしなくてもいいわけで。
out = new StringBuffer()
r = 0..10
for(i in r){
out << i
}
println out


このRanges、負からはじめてもオッケーなんだよね。
def r = -7..7
for(i in r){
println i
}


reverse使えば、逆にすることもできますと。
(1..10).reverse().each{
print it;
}


Rangesの使い方こんなのもあるよってことで。
r = "あ".."ん"
for(i in r){
print i
}



参考

: