Kotlin中maxOf()和max()方法有什么区别?

4

我有点困惑于这些方法的不同用法。我可以看到Kotlin.mathKotlin.comparisons中各有一个方法,因此我猜测这意味着maxOf()可以与用户自定义类的对象一起使用,但这是唯一的区别因素吗?


1
maxOf 函数有很多重载。这意味着可以比较更多类型,包括实现了 Comparable 接口的类型,甚至任何类型只要你提供了相应的 Comparator。还有一些重载函数接受可变参数,这意味着你可以获取任意数量参数的最大值。相比之下,max 的限制更多,无论是参数数量还是参数类型。但我不知道为什么存在两个不同的 API。 - Slaw
1
maxOf 函数有许多更多的重载。这意味着可以比较更多类型,包括实现 Comparable 的类型,甚至任何类型只要你提供了一个 Comparator。还有一些重载函数接受 varargs,这意味着可以获取任意数量参数的最大值。相比之下,max 更加受限,无论是在参数数量还是参数类型方面。但我不知道为什么存在这两个 API。 - Slaw
1个回答

4
也许了解这里的历史可以有所帮助。
在 Kotlin 1.1 中,minOfmaxOf 被作为单独的特性添加。我认为这个想法是你应该在非数学情况下使用它们。毕竟,他们给出的例子是:
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 中,他们将很多数学常量和函数添加到了标准库中,并称其为 kotlin.math。由于 minmax 也是数学函数,所以他们也添加了 minmax

这只是我的观点,但与 minOfmaxOf 相比,如果你将 minmax 放在一个更复杂的数学表达式中,它们将更容易阅读。这样整个表达式看起来更像数学,而不是英语。

在功能上,它们的行为相同,正如你所说,minOfmaxOf也适用于任何可比较的事物,或者如果提供了一个Comparator,则适用于任何东西。这是因为minOfmaxOf并不是严格为数学情况设计的,而minmax是。

请注意,在Kotlin 1.4中,maxOfminOf的vararg版本也被添加了,但对于minmax没有。再次强调,这是因为传统上数学上的minmax只接受两个参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接