Size: a a a

Kotlin Community

2019 November 24

AS

Anthony Styzhin in Kotlin Community
Alexander Nozik
Еще категорически не рекомендуется тут использовать !!
Согласен, но в условиях задачи было указанно что стринг пустым быть не может по условиям задачи.
источник

AN

Alexander Nozik in Kotlin Community
Anthony Styzhin
Благодарю, значит дело в сложности алгоритма, примерно так и предполагал, но не мог найти подтверждение своих догадок.
Ну не в сложности, а в специлизации
источник

BV

Boris Vanin in Kotlin Community
Alexander Nozik
Ну не в сложности, а в специлизации
Да, просто это методы разных классов
источник

AS

Anthony Styzhin in Kotlin Community
Boris Vanin
Это вопрос скорее для старта, но самый простой способ узнать разницу это посмотреть исходник
по исходникам нашёл только что count()
inline fun CharArray.count(predicate: (Char) -> Boolean): Int
а length только в описании стринга как
val length: Int
“под капот” length не удалось заглянуть.
источник

AS

Anthony Styzhin in Kotlin Community
Это я в документации на kotlinlang.org/ смотрел. Ну и естественно гуглил, если какие-то отличия были, то они касались элементов в коллекциях и тд.
источник

BV

Boris Vanin in Kotlin Community
Anthony Styzhin
по исходникам нашёл только что count()
inline fun CharArray.count(predicate: (Char) -> Boolean): Int
а length только в описании стринга как
val length: Int
“под капот” length не удалось заглянуть.
Да, со стрингом там и правда чуть больше магии, чем хотелось бы
источник

AS

Anthony Styzhin in Kotlin Community
В любом случае благодарю за ответ 🙂
источник

BV

Boris Vanin in Kotlin Community
Anthony Styzhin
по исходникам нашёл только что count()
inline fun CharArray.count(predicate: (Char) -> Boolean): Int
а length только в описании стринга как
val length: Int
“под капот” length не удалось заглянуть.
А count похоже не тот, этот предикат принимает
источник

BV

Boris Vanin in Kotlin Community
Но реализация та же, а там как минимум проперти, а не функция
источник

AS

Anthony Styzhin in Kotlin Community
Да, не тот, это я поиском сейчас нашёл по чарэррею, не туда видимо кликнул.
источник

AS

Anthony Styzhin in Kotlin Community
В слаке сейчас ссылку кинули:
https://github.com/JetBrains/kotlin/blob/master/libraries/stdlib/common/src/generated/_Strings.kt#L946-L952
/**
* Returns the length of this char sequence.
*/
@kotlin.internal.InlineOnly
public inline fun CharSequence.count(): Int {
   return length
}
источник

BV

Boris Vanin in Kotlin Community
Anthony Styzhin
В слаке сейчас ссылку кинули:
https://github.com/JetBrains/kotlin/blob/master/libraries/stdlib/common/src/generated/_Strings.kt#L946-L952
/**
* Returns the length of this char sequence.
*/
@kotlin.internal.InlineOnly
public inline fun CharSequence.count(): Int {
   return length
}
Логично, да, главное тут понять у кого метод, от этого по сути всё зависит
источник

AS

Anthony Styzhin in Kotlin Community
В офф слаке говорят что в случае стринга нет принципиальной разницы между этими двумя способы ибо под капотом одно и тоже происходит.
источник

AS

Anthony Styzhin in Kotlin Community
Специально уточнил про разницу на тему большого О
источник

BV

Boris Vanin in Kotlin Community
Anthony Styzhin
В офф слаке говорят что в случае стринга нет принципиальной разницы между этими двумя способы ибо под капотом одно и тоже происходит.
После того как реализацию посмотрел, это очевидно
источник

QH

Quantum Harmonizer in Kotlin Community
толку-то от количества UTF-16-слов?
Это даже не кодпоинты.
источник

BP

Bogdan Panchenko in Kotlin Community
Alexander Nozik
В общем случае length будет предпочтительнее, поскольку вызывает свойство самой строки и может быть оптимизировано, то есть выполняться за O(1). count(), если не ошибаюсь - это экстеншен над Iterable, то есть он всегда будет пробегаться по всем символам за O(n).
нет конт вызывает тот же length
источник

BV

Boris Vanin in Kotlin Community
Говорю же, лучший способ понять как что-то работает это посмотреть реализацию
источник

BV

Boris Vanin in Kotlin Community
Bogdan Panchenko
нет конт вызывает тот же length
Выше же реализация
источник

AS

Anthony Styzhin in Kotlin Community
Boris Vanin
После того как реализацию посмотрел, это очевидно
Обязательно возьму на заметку, просто не знал где реализацию эту найти кроме документации на котлинланг.орг, а оно вон как, прям на гитхабе вся поднаготная
источник