이 인터페이스는 앞서 closeRange할 때 말했던 IntRange, LongRange, CharRange에 있는 Progression 인터페이스가 상속한 인터페이스이다. 이 인터페이스는 for문의 in을 사용할 수 있게 해준다.
이 함수에는 세 가지 프로퍼티가 있는데,
first : 반복자의 첫 값 반환
last : 반복자의 마지막 값 반환
step : 반복자가 몇 스탭을 건너뛰고 다음 값을 반환하는지 그 값을 출력.
일단 예시를 보자.
package iterableEx
fun main() {
val prog : IntProgression = 3..7
println(prog.first)
println(prog.last)
println(prog.step)
println("====")
for(i in prog)
println("$i")
}
결과값 :
3
7
1
====
3
4
5
6
7
뭐.. 익숙한 것 아닌가.. 보기에는 그냥.. 좀.. 평범하게 1씩 늘어나는 배열같다. 별 특별할 게 없어보인다.. step값이 나타는거 빼고.. 여기까지 보면 그냥 배열 쓰고 말지 왜 쓰냐 싶은데...
근데 이건 서막에 불과하다..(!)
iterable 함수들은 엄청난 확장함수들에 장점이 있다.
일단 코드를 보자
package iterableEx
fun IntProgression.print(){
print("first : ${this.first} ")
print("last : ${this.last} ")
println("step : ${this.step}")
for (i in this)
print("$i ")
println("\n")
}
fun main() {
val prog : IntProgression = 7 downTo 3
prog.print()
val prog2 : IntProgression = (3..7).reversed()
prog2.print()
val prog3 : IntProgression = 10 downTo 2 step 2
prog3.print()
val prog4 : IntProgression = 2 until 5
prog4.print()
}
downTo는 역순으로 Progression을 출력해준다. 왜 굳이 이런 확장함수를 사용하냐면...
val prog5 : IntProgression = 7..3
prog5.print()
컴파일로는 오류가 안나는데...
뒤에 출력되어야 할 반복문이 출력이 안된다.. 즉 역순은 반복자 처리를 할 수 없다는 소리가 된다. 그러니까 downTo를 이용하고.. 혹시라도 이걸 그래도 뒤집고 싶거든 .reversed() 함수를 사용한다(prog2 참조).
그리고 prog3을 보면 알겠지만 내가 뛰어넘을 수 있는 숫자도.. 설정 가능하다. 당연히 .. 연산자도 허용가능하다.
val prog5 : IntProgression = 2..10 step 2
prog5.print()
그리고 step에는 무조건 양수만 들어가야한다. 음수가 들어가면 Exception이 발생하는데...
Exception in thread "main" java.lang.IllegalArgumentException : Step must be positive, 예외가 발생한다.
until 명령어는 그 값 전 까지의 값들을 모두 호출해준다. 즉, until 5면 4까지의 값을 모두 출력해준다고 생각하면 된다.
약간 i<5와 유사하달까...
결과 값 :
first : 7 last : 3 step : -1
7 6 5 4 3
first : 7 last : 3 step : -1
7 6 5 4 3
first : 10 last : 2 step : -2
10 8 6 4 2
first : 2 last : 4 step : 1
2 3 4
first : 2 last : 10 step : 2
2 4 6 8 10
'Android > 안드로이드 스터디(Kotlin)' 카테고리의 다른 글
Kotlin] 48. Mutable Collection (0) | 2020.12.23 |
---|---|
Kotlin] 47. Collection (0) | 2020.12.23 |
Kotlin] 45. ClosedRange (0) | 2020.12.23 |
Kotlin] 44. Comparable (0) | 2020.12.23 |
Kotlin] 43. Triple (0) | 2020.12.22 |