그리고 진행의 간격을 지정할 수도 있다.
1..10 step 3 // 1, 4, 7, 10 15 downTo 9 step 2 // 15, 13, 11, 9
진행의 간격은 양수여야 한다. 그래서 방금 본 예제처럼 downTo와 step으로 진행을 만들 때도 양수를 써야 한다.
진행의 원소는 시작 값에 간격을 연속적으로 더해서 만들어진다. 따라서 실제로는 끝 값이 진행에 속한 원소가 아닐 수도 있다. 이런 경우에는 자동으로 끝 값에 가장 가까운 값까지만 진행에 속하게 된다.
1..12 step 3 // 1, 4, 7, 10: 1..10 step 3과 같음 15 downTo 8 step 2 // 15, 13, 11, 9: 15 downTo 9 step 2와 같음
범위를 사용하면 문자열이나 배열의 일부분을 뽑아낼 수 있다. subString() 함수가 닫힌 정수 범위를 받는 경우에는 두 인덱스 값을 받는 경우와 달리 끝값 위치에 있는 문자가 포함된다는 점에 유의하라.
"Hello, World".substring(1..4) // ello "Hello, World".substring(1 until 4) // ell "Hello, World".substring(1, 4) // ell: substring(1 until 4)와 같음 IntArray(10) { it*it }.sliceArray(2..5) // 4, 9, 16, 25 IntArray(10) { it*it }.sliceArray(2 until 5) // 4, 9, 16
범위와 진행 타입은 코틀린 표준 라이브러리에 IntRange, FloatRange, CharProgression, IntProgression 등으로 정의돼 있다. kotlin.ranges 패키지에 대한 문서5를 찾아보면 범위나 진행에 관계된 모든 타입과 함수, 프로퍼티 목록을 볼 수 있다.