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 등)와 우선순위가 같다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.