#kotlin
#kotlin
Вопрос:
Как указано в названии:
Есть ли разница между String.getOrElse()
и String.elementAtOrElse()
? С функциональной точки зрения они кажутся полностью идентичными, может быть, какая-то разница в производительности?
Тот же вопрос относится к String.getOrNull()
и String.elementAtOrNull()
.
Комментарии:
1. Отличный вопрос! Было бы интересно услышать историю, стоящую за этим. Я делаю ставку на некоторые загадочные старые уровни совместимости с JVM или JS.
Ответ №1:
Чтобы объяснить, почему:
Из проблемы, которая добавила их в https://youtrack.jetbrains.com/issue/KT-6952 похоже, что elementAtOrElse()
он был добавлен первым и назван таковым для совместимости с Iterable
s, в то время getOrElse()
как был добавлен позже для совместимости с List
s.
Ответ №2:
Глядя на реализацию в https://github.com/JetBrains/kotlin/blame/master/libraries/stdlib/common/src/generated/_Strings.kt они выглядят одинаково.
/**
* Returns a character at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this char sequence.
*
* @sample samples.collections.Collections.Elements.elementAtOrElse
*/
@kotlin.internal.InlineOnly
public inline fun CharSequence.elementAtOrElse(index: Int, defaultValue: (Int) -> Char): Char {
return if (index >= 0 amp;amp; index <= lastIndex) get(index) else defaultValue(index)
}
/**
* Returns a character at the given [index] or the result of calling the [defaultValue] function if the [index] is out of bounds of this char sequence.
*/
@kotlin.internal.InlineOnly
public inline fun CharSequence.getOrElse(index: Int, defaultValue: (Int) -> Char): Char {
return if (index >= 0 amp;amp; index <= lastIndex) get(index) else defaultValue(index)
}
Я надеюсь, что кто-нибудь еще может предоставить подробную информацию об истории этого.
Ответ №3:
Те самые ссылки, которые вы включили в свой вопрос, позволяют вам увидеть исходный код каждой реализации, который говорит вам, что нет, разницы нет.
На самом деле elementAtOrNull
буквально просто вызывает getOrNull
.
Комментарии:
1. Спасибо, кажется, я
(source)
все время игнорировал кнопку на страницах документации.