我对这些方法的不同用例感到有点困惑.我可以看到一个在Kotlin.math
中,一个在Kotlin.comparisons
中,所以我猜maxOf()
可以与用户定义的类的对象一起使用,但这是唯一的区别因素吗?
我对这些方法的不同用例感到有点困惑.我可以看到一个在Kotlin.math
中,一个在Kotlin.comparisons
中,所以我猜maxOf()
可以与用户定义的类的对象一起使用,但这是唯一的区别因素吗?
或许了解这里的历史会有所帮助.
在Kotlin 1.1、minOf
和maxOf
got added as their own separate feature中.我认为你的 idea 是,你应该在相当非数学的情况下使用它.毕竟,他们给出的例子是:
val list1 = listOf("a", "b")
val list2 = listOf("x", "y", "z")
val minSize = minOf(list1.size, list2.size)
val longestList = maxOf(list1, list2, compareBy { it.size })
想象一下,仅仅是试图编写一些可读的代码,在其中添加单词"of"只会使这行代码更具英式风格.
后来,在Kotlin 1.2,they added a whole lot of math constants and functions into the standard library,并称之为kotlin.math
包.从min
和max
are also mathematical functions开始,他们也增加了min
和max
.
这只是我的观点,但与minOf
和maxOf
相比,如果把min
和max
放在一个更复杂的数学表达式中,它们的可读性会更好.这会让整件事看起来更像数学,而不是英语.
在功能上,它们的行为是相同的,就像你说的,minOf
和maxOf
也适用于任何Comparable
种东西,或者任何东西,如果你提供Comparator
的话.这是因为minOf
和maxOf
严格地不是为数学情况而设计的,而min
和max
are则是为数学情况而设计的.
请注意,在Kotlin 1.4中,还添加了maxOf
和minOf
的vararg版本,但没有添加min
和max
版本.同样,这是因为mathematical、min
和max
通常只接受两个参数.