#14 Kotlin Koans Conventions/In range 해설

1 소개



Kotlin 공식 레퍼런스의 Kotlin Koans/In range의 해설 기사입니다.

Kotlin Koans를 통해 Kotlin을 배우는 사람들의 도움이 되길 바랍니다.

다만, 레퍼런스를 자력으로 읽는 힘을 기르고 싶은 분은,
곧이 기사를 보지 마십시오!

일단 각자 도전하고 나서 볼 수 있다고 생각합니다

2 contains() 함수



Operator overloading
a in b 라고 하는 표현으로 b.contains(a) 와 같이 사용합니다.

3 Conventions/In range 해설



Kotlin Koans Conventions/In range 의 해설입니다.
수시로 본 사이트의 내용을 인용하겠습니다.

오른쪽의 본문을 보자.

In Kotlin in checks are translated to the corresponding contains calls:
val list = listOf("a", "b")
"a" in list  // list.contains("a")
"a" !in list // !list.contains("a")

Read about ranges . Add a method fun contains(d: MyDate) to the class DateRange to allow in checks with a range of dates.

왼쪽의 코드와 MyDate.kt 파일의 코드를 살펴 보겠습니다.

In_range
class DateRange(val start: MyDate, val endInclusive: MyDate)/* TODO */

fun checkInRange(date: MyDate, first: MyDate, last: MyDate): Boolean {
    return date in DateRange(first, last)
}


MyDate.kt
data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int) : Comparable<MyDate> {
    override fun compareTo(other:MyDate) = when{
        year != other.year -> year - other.year
        month != other.month -> month - other.month
        else -> dayOfMonth - other.dayOfMonth
    }
}

checkInRange() 함수를 호출할 때, MyDate 형의 인스턴스를 3개 건네주고,
date가 first와 last 사이의 날짜임을 확인하는 코드를 구현해 보겠습니다.
return date in DateRange(first, last)

DateRange(first,last) 부분에서,
속성 startfirstendInclusivelast 가 할당됨
DateRange 형식의 인스턴스가 생성되었습니다.
(start/first/endInclusive/last는 모두 MyDate 타입)

DateRange(first,last)는 contains()를 호출할 때 인수로 date를 전달합니다.

그래서 TODO 부분의 구현은

first<=date<=last의 대소 관계를 표현하면 됩니다.

따라서 TODO의 부분을 구현한 해답은
contains() 함수를 이용한 다음과 같습니다.

In_range
class DateRange(val start: MyDate, val endInclusive: MyDate){
    operator fun contains(item: MyDate): Boolean = start <= item && item <= endInclusive
}

fun checkInRange(date: MyDate, first: MyDate, last: MyDate): Boolean {
    return date in DateRange(first, last)
}


4 마지막으로



다음 번은 Kotlin Koans Conventions/Range to의 해설을합니다.

좋은 웹페이지 즐겨찾기