Home Kotlin Pondering over Kotlin Ranges

Pondering over Kotlin Ranges

0
482
Kotlin Ranges
Kotlin Ranges

Range expressions are formed with rangeTo functions that have the operator form .. which is complemented by in and !in.

Range is defined for any comparable type, but for integral primitive types it has an optimized implementation. Here are some examples of using ranges

if ( i in 1 .. 10 ) { // equivalent of 1 <= i && i <= 10
  println(i);
}

[quads ad=1]

Integral type ranges (IntRange, LongRange, CharRange) have an extra feature: they can be iterated over. The compiler takes care of converting this analogously to Java’s indexed for-loop, without extra overhead.

for (i in 1..4) print(i) // prints "1234"

for (i in 4..1) print(i) // prints nothing

Have you noticed that the second statement prints out nothing. That’s because IntRange is defined by its minimum start and its maximum endInclusive values. In other words, when endInclusive < start, the range is empty.

You can use downTo() function which is defined in the standard library to iterate the Range in reverser order.

[quads ad=2]

Alternatively, you can also use the progression. A progression can be any arithmetic sequence, so it can go up or down. Here are two ways to make a decrementing progression:

//Using downTo() function
for (i in 4 downTo 1) print(i) // prints "4321"

//Using reversed() function
(1..3).reversed().forEach(System.out::print)

Can Ranges in Kotlin do the same magic as other language iterator of stepping the numbers more than the default value of 1. Well, the answer is YES. Here is the implementation for your quick reference to step the range for the value greater than 1.

for (i in 1..4 step 2) print(i) // prints "13"

for (i in 4 downTo 1 step 2) print(i) // prints "42"

Another great point in Ranges is not to include the last element in the Range.

for (i in 1 until 10) { // i in [1, 10), 10 is excluded
     println(i)
}

Well this is just the glimpse of the Ranges in Kotlin, in the next journal entry we will try to explore how internally this works.

[quads ad=3]