KotlinDive

プログラミング言語 Kotlin についての入門ブログです。

レンジ

レンジの基本的な使い方

レンジは数値の範囲を表すために利用する式です。
「..」演算子や「..」演算子に対応する関数である「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

JavaC++では、「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