Size: a a a

Kotlin Community

2019 November 23

AE

Alexandr Emelyanov in Kotlin Community
да, оффтоп не продолжим пожалуй
источник

IO

Ivan Osipov in Kotlin Community
Всем привет
Подъехал видос для тех кто хотел узнать что такое kotlin contracts, но ленился открыть доку
Конструктивный фидбек в личку приветствуется
https://youtu.be/R8oAoiybJsY
источник

BP

Bogdan Panchenko in Kotlin Community
Ivan Osipov
Всем привет
Подъехал видос для тех кто хотел узнать что такое kotlin contracts, но ленился открыть доку
Конструктивный фидбек в личку приветствуется
https://youtu.be/R8oAoiybJsY
https://youtu.be/R8oAoiybJsY?t=1005 это же по факту fun <T> foo(value: T) where T : Type1 || T : Type2
источник

BP

Bogdan Panchenko in Kotlin Community
*почти
источник

BP

Bogdan Panchenko in Kotlin Community
хотя нет, вообще не так,  показалось
источник

IO

Ivan Osipov in Kotlin Community
кстати, я тут как-то на днях попытался сделать что-то вроде этого
одна функция возвращает T where T: A, T: B, а другая принемает аналогичное T, какого было моё удивление, когда это не скомпилировалось в месте вызова второй функции
источник

IO

Ivan Osipov in Kotlin Community
хотя сейчас затестил на примитивном примере и всё ок =/
источник
2019 November 24

AA

Andrey Antipov in Kotlin Community
А кто-нибудь сталкивался вот с такой проблемой:
class Builder {
   companion object {
       operator fun Builder.invoke(block: () -> Unit) = block()
       fun runTest(
               scenario: Builder.() -> Unit,
               block: () -> Unit
       ): Unit = Builder().apply(scenario)(block)
   }
}

IDEA говорит, что параметр scenario функции runTest нигде не используется, предлагает его удалить. После удаления код, естественно, ломается.
источник

AA

Andrey Antipov in Kotlin Community
Это явно бага, только вот хотелось бы понять, бага чего именно.
источник

BV

Boris Vanin in Kotlin Community
Andrey Antipov
Это явно бага, только вот хотелось бы понять, бага чего именно.
Котлин плагина же, если инспекция в иде работает неправильно
источник

AA

Andrey Antipov in Kotlin Community
Boris Vanin
Котлин плагина же, если инспекция в иде работает неправильно
Оно очень странно себя ведёт: Analyze -> Inspect Code... не говорит, что scenario не используется, а во вкладке редактирования кода параметр подсвечен серым и иде предлагает его удалить
источник

AA

Andrey Antipov in Kotlin Community
Find Usages тоже корректно работает при этом
источник

RB

Rob B in Kotlin Community
Было такое с дженериком, идея говорит - тип избыточен, если убрать компилятор не может вывести.
источник

VP

Vladimir Petrakovich in Kotlin Community
Rob B
Было такое с дженериком, идея говорит - тип избыточен, если убрать компилятор не может вывести.
Ну это больше на разницу вывода типов в IDE (с экспериментальным)  и компиляторе.
источник

AS

Anthony Styzhin in Kotlin Community
Приветствую!
Надеюсь вопрос по адресу. Подскажите, пожалуйста, в чём принципиальное отличие между двумя вариантами одной и той же функции. А точнее какое преимущество, если оно есть, у одного варианта над другим.

fun findShort(s: String): Int = s.split(" ").minBy { it.length }!!.count()
или
fun findShort(s: String): Int = s.split(" ").minBy { it.length }!!.length

Пояснение - задача функции просто получить инт количества знаков в самом коротком слове в стринге состоящим из любого количества слов (по условиям задачи стринг не может быть пустой, проверка на нал не нужна и тд).
Работает и так и так, на codewars в вариантах решения есть и такой и такой вариант.
Просто спортивный интерес для саморазвития
источник

AN

Alexander Nozik in Kotlin Community
Anthony Styzhin
Приветствую!
Надеюсь вопрос по адресу. Подскажите, пожалуйста, в чём принципиальное отличие между двумя вариантами одной и той же функции. А точнее какое преимущество, если оно есть, у одного варианта над другим.

fun findShort(s: String): Int = s.split(" ").minBy { it.length }!!.count()
или
fun findShort(s: String): Int = s.split(" ").minBy { it.length }!!.length

Пояснение - задача функции просто получить инт количества знаков в самом коротком слове в стринге состоящим из любого количества слов (по условиям задачи стринг не может быть пустой, проверка на нал не нужна и тд).
Работает и так и так, на codewars в вариантах решения есть и такой и такой вариант.
Просто спортивный интерес для саморазвития
В общем случае length будет предпочтительнее, поскольку вызывает свойство самой строки и может быть оптимизировано, то есть выполняться за O(1). count(), если не ошибаюсь - это экстеншен над Iterable, то есть он всегда будет пробегаться по всем символам за O(n).
источник

AN

Alexander Nozik in Kotlin Community
Еще категорически не рекомендуется тут использовать !!
источник

AN

Alexander Nozik in Kotlin Community
Получите ошибку времени выполнения в крайних случаях
источник

AS

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

BV

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