レンジの基本的な使い方
レンジは数値の範囲を表すために利用する式です。
「..」演算子や「..」演算子に対応する関数である「rangeTo()」関数を「in」キーワードと組み合わせて利用します。
「a..b」で「aからbの間」という意味になります。
比較で利用する場合は、「a <= x && x <= b」で、繰り返しで利用する場合は「a, a + 1, ... , b - 1, b」となります。
レンジは標準ではInt型ですが、Doubleの値とも比較できます。
fun main(args: Array) {
// .. 演算子でレンジを利用する
for (i in 1..5) {
println(i)
}
// rangeTo 関数でレンジを利用する
for (i in 6.rangeTo(10)) {
println(i)
}
// Doubleとも比較できる
if (10.0 in 0..100) {
println("in 0 to 100")
}
// 否定も可能です
if (-123 !in 0..100) {
println("not in 0 to 100")
}
}
1
2
3
4
5
6
7
8
9
10
in 0 to 100
not in 0 to 100
レンジの応用的な使い方
downTo
繰り返しなどで数値を大きい方から小さい方にイテレーションしたい場合は「downTo」を使うことができます。
fun main(args: Array) {
val start = 9
val end = 0
// 通常のレンジ演算子は大きい方から小さい方には使えない
println("start..end")
for (i in start..end) {
print(i)
}
// downToを使うと大きい方から小さい方にイテレーションできる
println("start downTo end")
for (i in start downTo end) {
print(i)
}
}
start..end
start downTo end
9876543210
step
レンジで繰り返しをする場合に、数値を1ずつインクリメントするのではなく、任意の間隔で利用するには「step」を使います。
fun main(args: Array) {
val num = 3
// step で任意の間隔を指定する
println("0..20 step num")
for (i in 0..20 step num) {
print("${i} ")
}
// downToにも利用できます
println("\n20 downTo 0 step num")
for (i in 20 downTo 0 step num) {
print("${i} ")
}
}
0..20 step num
0 3 6 9 12 15 18
20 downTo 0 step num
20 17 14 11 8 5 2
until
JavaやC++では、「for (int i = 0; i < count; i++)」のようなループをよく使うと思います。
この時、繰り返し範囲は「0 <= i < count」のように終わりが開区間になっています。
一方、Kotlinのレンジは「0..count」とすると「0 <= i <= count」というようにcountも含んだ閉区間になります。
Kotlinで「0 <= i < count」のようにcountを含まない区間を取得するにはuntilを使います。
fun main(args: Array) {
// until を使うと最後を含まない繰り返しができる
println("0 until 10")
for (i in 0 until 10) {
print("${i} ")
}
}
0 until 10
0 1 2 3 4 5 6 7 8 9