groovy 基本ループとか
2007/08/22
2007/08/23
groovy
やはりループを押さえておこうということで、
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) { 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
println result
まさに、2刻み(step)で動くわけだ。
Rangesは".."で記述する。このRangesはたしかに直感的だよね。
※Rangesは単にRange(s)です。
Rangesの定義を別にループの宣言部分でしなくてもいいわけで。
out = new StringBuffer()
r = 0..10
for(i in r){
out << i
}
println out
r = 0..10
for(i in r){
out << i
}
println out
このRanges、負からはじめてもオッケーなんだよね。
def r = -7..7
for(i in r){
println i
}
for(i in r){
println i
}
reverse使えば、逆にすることもできますと。
(1..10).reverse().each{
print it;
}
print it;
}
Rangesの使い方こんなのもあるよってことで。
r = "あ".."ん"
for(i in r){
print i
}
for(i in r){
print i
}
参考
: