Provided by: JetBrains Academy
3 minutes read

Imagine a situation where you need to check whether the integer variable c is greater than or equal to a and less than or equal to b. To do that you may write something like this:

val within = a <= c && c <= b

This code works well. However, Kotlin provides a more convenient way to do the same thing using ranges:

val within = c in a..b

Here, a..b is a range of numbers from a to b (including both border values), in is a special keyword that is used to check whether a value is within a range. Later you will see that this keyword can be used with other types as well. This is a closed-ended range.

Also, we have an open-ended range: a..<b is a range of numbers from a until b (excluding the border value, b).

The value of within is true if c belongs to the range inclusively; otherwise, it is false.

Here are some examples:

println(5 in 5..15)  // true
println(12 in 5..15) // true
println(15 in 5..15) // true
println(20 in 5..15) // false
println(5 in 5..<15)  // true
println(15 in 5..<15) // false

If you need to exclude the right border, you may subtract 1 from it or use ..< to get the open-ended range (the recommended way).

val withinExclRight = c in a..b - 1 // a <= c && c < b
val withinExclRight = c in a..<b // a <= c && c < b (the recommended way)

If you need to check that a value is not within a range, just add ! (not) before in.

val notWithin = 100 !in 10..99 // true

You may combine ranges using standard logical operators. The code below checks if c is within one of three ranges.

val within = c in 5..10 || c in 20..30 || c in 40..50 // true if c is within at least one range

You can assign a range to a variable and use it later.

val range = 100..200
println(300 in range) // false

In addition to integer ranges, you can also use ranges of characters and even strings (according to dictionary order).

println('b' in 'a'..'c') // true
println('k' in 'a'..'e') // false

println("hello" in "he".."hi") // true
println("abc" in "aab".."aac") // false

This is enough to understand ranges for integer numbers and characters. We won't cover other type ranges here.

1214 learners liked this piece of theory. 15 didn't like it. What about you?
Report a typo