Whats's New Kotlin 1.1にも載っていないマイナーな変更。
Collection<T>
やArray<T>
、Iterable<T>
の拡張関数、average
この関数の、要素が空の時の返り値がKotlin 1.1で変わりました。
Kotlin 1.0では次のように、0.0
を返します。
@Test
fun test1() {
val result = emptyList<Int>().average()
Assert.assertTrue(result == 0.0)
}
Kotlin 1.1では、Double.NaN
を返します。
@Test
fun test1() {
val result = emptyList<Int>().average()
Assert.assertTrue(result.isNaN())
}
IssueはこちらのKT-15399。
Iterable.max() and Iterable.average() have different behavior when run on empty collections; max() returns null, but average() returns zero. These should have the same behavior. I believe that returning null is the correct behavior, since the average of "nothing" is not "zero".
私個人の意見としてはこの方が言っている通り、average
も要素が空の時はnull
を返すべきだと思います。ただ、それだと返り値型をDouble?
に変更しないといけないので破壊的な変更になってしまいます。そのためKotlin 1.1の変更では、Double.NaN
にしたのでしょうかね?
変更コミットはこちら。Iterable<T>
、Array<T>
、Collection<T>
、Sequence<T>
のaverage()
の実装が変更されています。
ChangeLogには載ってましたね。