공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
이번 포스팅에서는 Ranges 에 대해서 공부합니다.
기본적인 범위의 표현은 in키워드를 사용해서 표현합니다.
ex) i in 1..10 -> i >=1 && i<=10
1,2,3,4,5,6,7,8,9,10 이렇게 되는 거죠.
ex) i in 10..1 은 실행해도 아무런 결과를 얻을 수 없습니다.
기본적으로 ++ 연산으로 진행되기 때문에 --연산을 하려면
i in 10 downTo 1 처럼 해야 --연산을 할 수 있습니다.
그리고 아래와 같은 코드도 가능합니다.
for( i in 1..10 step 2 ) print(i) // 13579
println()
for( i in 10 downTo 1 step 2 ) print(i) // 108642
그리고 a..b 에서 b를 제외하고 싶다면
fun main(args: Array<String>) {
for(i in 1 until 10) {
print(i) // 123456789
}
}
이렇게 하면 됩니다.
How it works
Ranges 는 공통 라이브러리 인터페이스인 CloseRange<T>를 구현합니다.
CloseRange<T> 는 비교 가능한 타입에 대해 정의된 수학적 의미에서 closed interval을
나타냅니다.
Range에는 start 와 endInclusive 두 끝 점이 있습니다.
주 연산은 참조이고 일반적으로 in / !in 형태의 연산자를 사용합니다.
Integral type progressions(IntProgression, LongProgression, CharProgression)은
산술 Progression을 의미합니다.
Progressions 는 first element 와 last element 그리고 0이 아닌 step을 정의합니다.
first element 는 말 그대로 first 이고 후속 요소는 first에 step을 더합니다.
last element 는 항상 progression이 비어있지 않으면 항상 hit됩니다.
progression 은 Iterable<N> 의 subtype이고 N은 Int, Long, Char 가 올 수 있습니다.
그리고 이것은 map, filter 등과 같이 for-loops 와 메서드를 사용할 수 있습니다.
progression을 통한 for-loop은 java / javascript와 동일합니다.
for (int i = first; i != last; i += step) { // ... }
그렇다고 코틀린에서 선언할 때 위와 같은 형식을 허용하는 건 아닙니다.
단순히 내부적으로 저렇게 진행된다는 것입니다.
Integral 타입의 경우 .. 연산자는 ClosedRange<T> 와 *Progression을 모두 구현하는
오브젝트를 만듭니다. 예를 들어서 IntRange 는 ClosedRange<Int> 구현하고
IntProgression을 상속 받습니다.
그러므로 IntProgression을 위해 정의된 연산들은 IntRange에서도 사용 가능합니다.
downTo() 와 step() 메서드는 항상 *Progression입니다.
Progressions 는 companion objects 에 정의된 fromClosedRange 메서드로 생성됩니다.
IntProgression.fromClosedRange(start, end, step)
progression의 마지막 element 는 최댓값이 end 보다 크지 않도록, 또는 최솟값이
end 보다 작지 않도록 계산합니다.
유용한 메서드들
https://kotlinlang.org/docs/reference/ranges.html#utility-functions
위 링크에서 각 메서드들에 대해 공부하실 수 있습니다.
rangeTo()
downTo()
reversed()
step()
이상입니다.
다음 포스팅에서는 Type Checks and Casts: 'is' and 'as' 에 대해서 공부합니다.
감사합니다.
'코틀린(Kotlin)' 카테고리의 다른 글
코틀린(kotlin) : this 와 Equality (0) | 2018.02.08 |
---|---|
코틀린(kotlin) : 타입체크 is 와 캐스팅 as Type Checks and Casts (0) | 2018.02.07 |
코틀린(kotlin) : Collections : List, Set, Map (0) | 2018.02.07 |
코틀린(kotlin) : Destructuring Declaration (0) | 2018.02.06 |
코틀린(kotlin) : Inline Function 인라인 메서드 (0) | 2018.02.06 |