in/!in 연산을 지원하는 타입이 범위만 있는 것은 아니다. 문자열이나 배열처럼 다른 타입의 원소를 담는 컨테이너 종류의 타입이라면 보통 이 두 연산을 지원한다.
val numbers = intArrayOf(3, 7, 2, 1) val text = "Hello!" println(2 in numbers) // true println(9 !in numbers) // true println(4 in numbers) // false println('a' in text) // false println('H' in text) // true println('h' !in text) // true
우선순위로 보면 범위 연산인 ..는 덧셈과 중위 연산 사이에 속하며, in과 !in 연산은 중위와 비교 연산 사이에 속한다. 따라서 2장 코틀린 언어 기초에서 봤던 연산자 우선순위표를 다음과 같이 바꿔야 한다.
▼ 표 3-1 연산자 우선순위
덧셈 |
+, - |
a + b..c - d // (a + b)..(c - d) |
범위 |
.. |
a..b step c // (a..b) step c a in b..c // a in (b..c) |
중위 |
이름 붙은 중위 연산자들 |
a < b or b < c // (a < (b or b)) < c a == b and b == c // (a == b) and (b == c) a in b or a in c // (a in (b or a)) in c |
원소 검사 |
in !in |
a < b in c // a < (b in c) a !in b > c // (a !in b) > c |
비교 |
< > <= >= |
a < b == b < c // (a < b) == (b < c) a < b && b < c // (a < b) && (b < c) |
until, downTo, step은 다른 이름 붙은 중위 연산자(and, or 등)와 우선순위가 같다.