Description
Kotlin for loop iterates through anything that provides an iterator. Make the class
DateRange
implement Iterable<MyDate>, so that it could be iterated over. You can use the functionMyDate.nextDay()
defined inDateUtil.kt
for loop は、イテレータを提供するあらゆるものを繰り返します。 Iterable<MyDate> を実装した
DataRange
クラスを作成し、イテレートできるようにしてください。DateUtil.kt
で定義されている関数MyDate.nextDay()
を使用できるようになります。
Code
class DateRange(val start: MyDate, val end: MyDate): Iterable<MyDate> {
override fun iterator(): Iterator<MyDate> = DateIterator(this)
}
class DateIterator(val dateRange:DateRange) : Iterator<MyDate> {
var current: MyDate = dateRange.start
override fun next(): MyDate {
val result = current
current = current.nextDay()
return result
}
override fun hasNext(): Boolean = current <= dateRange.end
}
fun iterateOverDateRange(firstDate: MyDate, secondDate: MyDate, handler: (MyDate) -> Unit) {
for (date in firstDate..secondDate) {
handler(date)
}
}
Memo
- 前回のRange toの続き
for
はイテレータを返し、下記の3つの関数を演算子としてマークする必要がある。- 下記を返す、メンバーまたは拡張関数
iterator()
を持つ。- メンバーまたは拡張関数
next()
- Booleanを返す、メンバーまたは拡張関数
hasNext()
- メンバーまたは拡張関数
- 下記を返す、メンバーまたは拡張関数