首页 > 解决方案 > 在 indexOf(...) 中返回 -1 而不是 null 有什么好处?

问题描述

调用List.indexOf(...)时,返回-1而不是null值不存在有什么好处?

例如:

val list = listOf("a", "b", "c")
val index = list.indexOf("d")

print(index) // Prints -1

如果不是索引,结果null不是更干净吗?如果它有一个可选的返回类型,那么它将与 elvis 运算符:?以及诸如index?.let { ... }.

没有匹配-1项时返回而不是返回有什么好处?null

标签: kotlinlanguage-design

解决方案


只是猜测,但我可以想到两个原因:

第一个原因是为了兼容 Java 及其List.indexOf

正如文档所述:

返回: 此列表中指定元素第一次出现的索引,如果此列表不包含该元素,则返回 -1

第二个原因是与kotlins binarySearch具有相同的数据类型。

返回元素的索引,如果它包含在指定范围内的列表中;否则,反转插入点(-insertion point - 1)。插入点被定义为应该插入元素的索引,因此列表(或列表的指定子范围)仍然保持排序状态。

如果不存在,负值实际上包含在哪里插入元素的附加信息。但是由于普通indexOf方法适用于未排序的集合,因此您无法推断插入位置。


推荐阅读