#15 Kotlin Koans Conventions/Range to 해설
1 소개
Kotlin 공식 레퍼런스의 Kotlin Koans/Rnage to의 해설 기사입니다.
Kotlin Koans를 통해 Kotlin을 배우는 사람들의 도움이 되길 바랍니다.
다만, 레퍼런스를 자력으로 읽는 힘을 기르고 싶은 분은,
곧이 기사를 보지 마십시오!
일단 각자 도전하고 나서 볼 수 있다고 생각합니다
2 rangeTo() 함수와 contains() 함수
Operator overloading
모두 operator 한정자가 붙은 함수입니다.
a .. b
라는 표현으로 a.rangeTo(b)
와 같이 사용합니다.
a in b
라고 하는 표현으로 b.contains(a)
와 같이 사용합니다.
3 Conventions/Range to 해설
Kotlin Koans Conventions/Range to 의 해설입니다.
수시로 본 사이트의 내용을 인용하겠습니다.
오른쪽의 본문을 보자.
Implement the function MyDate.rangeTo(). This allows you to create a range of dates using the following syntax:
MyDate(2015, 5, 11)..MyDate(2015, 5, 12)
Note that now the class DateRange implements the standard ClosedRange interface and inherits contains method implementation.
왼쪽의 코드와 MyDate.kt 파일의 코드를 살펴 보겠습니다.
Range_tooperator fun MyDate.rangeTo(other: MyDate) = TODO()
class DateRange(override val start: MyDate, override val endInclusive: MyDate): ClosedRange<MyDate>
fun checkInRange(date: MyDate, first: MyDate, last: MyDate): Boolean {
return date in first..last
}
MyDate.ktdata 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
}
}
MyDate.kt 파일의 checkInRange()에 MyDate 형의 인스턴스 3개를 인수로서 건네주고,
date가 first와 last 사이의 날짜인지 확인할 수 있도록 구현해 봅시다.
MyDate 형의 인수 3개를 건네주고, checkInRange() 함수를 호출하면(자), 이하의 반환값이 돌려주어집니다.
return date in first..last
first .. last
는 first.rangeTo(last)
를 의미하므로 이 부분에 rangeTo()の戻り値
가 반환됩니다.
그러므로
return date in (rangeTo()の戻り値)
같은 상황이 됩니다.
date in (rangeTo()の戻り値)
는 (rangeTO()の戻り値).contains(date)
를 의미합니다.
contains() 함수는 특히 override 하고 스스로 구현할 필요가 없기 때문에 공식 레퍼런스의 것을 그대로 이용합니다 ( ClosedRange ).
공식 참조에 의하면, 호출자의 인스턴스가, 인수의 범위에 있을지에 따라 진위치를 돌려준다고 합니다.
즉, date가 (rangeTo()의 반환값)의 범위내인가 어떤가를 판정합니다.
그러므로 (rangeTo() 의 반환값)는 MyDate 형의 범위의 것입니다.
MyDate 형의 범위를 표현하기 위해서, 2 개의 프로퍼티가 각각 MyDate 형의 DateRange 인스턴스를 이용합니다.
따라서 TODO 부분의 구현된 해답은
Range_tooperator fun MyDate.rangeTo(other: MyDate) = DateRange(this,other)
class DateRange(override val start: MyDate, override val endInclusive: MyDate): ClosedRange<MyDate>
fun checkInRange(date: MyDate, first: MyDate, last: MyDate): Boolean {
return date in first..last
}
같아요.
(※)this는 rangeTO() 함수를 호출한 인스턴스(이 문제의 경우 first)를 의미합니다.
4 마지막으로
다음은 Kotlin Koans Conventions/For loop의 해설을합니다.
Reference
이 문제에 관하여(#15 Kotlin Koans Conventions/Range to 해설), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/G-o/items/7485dbe4e440ceb6092e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Operator overloading
모두 operator 한정자가 붙은 함수입니다.
a .. b
라는 표현으로 a.rangeTo(b)
와 같이 사용합니다.a in b
라고 하는 표현으로 b.contains(a)
와 같이 사용합니다.3 Conventions/Range to 해설
Kotlin Koans Conventions/Range to 의 해설입니다.
수시로 본 사이트의 내용을 인용하겠습니다.
오른쪽의 본문을 보자.
Implement the function MyDate.rangeTo(). This allows you to create a range of dates using the following syntax:
MyDate(2015, 5, 11)..MyDate(2015, 5, 12)
Note that now the class DateRange implements the standard ClosedRange interface and inherits contains method implementation.
왼쪽의 코드와 MyDate.kt 파일의 코드를 살펴 보겠습니다.
Range_tooperator fun MyDate.rangeTo(other: MyDate) = TODO()
class DateRange(override val start: MyDate, override val endInclusive: MyDate): ClosedRange<MyDate>
fun checkInRange(date: MyDate, first: MyDate, last: MyDate): Boolean {
return date in first..last
}
MyDate.ktdata 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
}
}
MyDate.kt 파일의 checkInRange()에 MyDate 형의 인스턴스 3개를 인수로서 건네주고,
date가 first와 last 사이의 날짜인지 확인할 수 있도록 구현해 봅시다.
MyDate 형의 인수 3개를 건네주고, checkInRange() 함수를 호출하면(자), 이하의 반환값이 돌려주어집니다.
return date in first..last
first .. last
는 first.rangeTo(last)
를 의미하므로 이 부분에 rangeTo()の戻り値
가 반환됩니다.
그러므로
return date in (rangeTo()の戻り値)
같은 상황이 됩니다.
date in (rangeTo()の戻り値)
는 (rangeTO()の戻り値).contains(date)
를 의미합니다.
contains() 함수는 특히 override 하고 스스로 구현할 필요가 없기 때문에 공식 레퍼런스의 것을 그대로 이용합니다 ( ClosedRange ).
공식 참조에 의하면, 호출자의 인스턴스가, 인수의 범위에 있을지에 따라 진위치를 돌려준다고 합니다.
즉, date가 (rangeTo()의 반환값)의 범위내인가 어떤가를 판정합니다.
그러므로 (rangeTo() 의 반환값)는 MyDate 형의 범위의 것입니다.
MyDate 형의 범위를 표현하기 위해서, 2 개의 프로퍼티가 각각 MyDate 형의 DateRange 인스턴스를 이용합니다.
따라서 TODO 부분의 구현된 해답은
Range_tooperator fun MyDate.rangeTo(other: MyDate) = DateRange(this,other)
class DateRange(override val start: MyDate, override val endInclusive: MyDate): ClosedRange<MyDate>
fun checkInRange(date: MyDate, first: MyDate, last: MyDate): Boolean {
return date in first..last
}
같아요.
(※)this는 rangeTO() 함수를 호출한 인스턴스(이 문제의 경우 first)를 의미합니다.
4 마지막으로
다음은 Kotlin Koans Conventions/For loop의 해설을합니다.
Reference
이 문제에 관하여(#15 Kotlin Koans Conventions/Range to 해설), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/G-o/items/7485dbe4e440ceb6092e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
MyDate(2015, 5, 11)..MyDate(2015, 5, 12)
operator fun MyDate.rangeTo(other: MyDate) = TODO()
class DateRange(override val start: MyDate, override val endInclusive: MyDate): ClosedRange<MyDate>
fun checkInRange(date: MyDate, first: MyDate, last: MyDate): Boolean {
return date in first..last
}
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
}
}
return date in first..last
return date in (rangeTo()の戻り値)
operator fun MyDate.rangeTo(other: MyDate) = DateRange(this,other)
class DateRange(override val start: MyDate, override val endInclusive: MyDate): ClosedRange<MyDate>
fun checkInRange(date: MyDate, first: MyDate, last: MyDate): Boolean {
return date in first..last
}
다음은 Kotlin Koans Conventions/For loop의 해설을합니다.
Reference
이 문제에 관하여(#15 Kotlin Koans Conventions/Range to 해설), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/G-o/items/7485dbe4e440ceb6092e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)