
Alexander
29.07.2018
16:54:09
Просто задача поика младшего общего предка - не совсем корректна, так что не стоит компиллятор заставлять ее решать.

Bogdan
29.07.2018
16:54:48

Alexander
29.07.2018
16:55:05
Расширенияеми злоупотреблять тоже не стоит. Они усложняют отладку и все-таки в общем случае дают рантаймовый оверхед. В том случае, если это вопрос одной лишней строки - оверкил

Google

Bogdan
29.07.2018
16:56:07
в смысле?
примитивы вывел, а вот обекты уже нет

Alexander
29.07.2018
16:56:23
Не очень понимаю. Одинаковые примитивы?

Bogdan
29.07.2018
16:56:23
а не я ошибку сделал

Alexander
29.07.2018
16:56:52
где тут примитивы:?

Bogdan
29.07.2018
16:57:01
не знаю на сколько одинаковый случай

Alexander
29.07.2018
16:59:18
Ну тогда тип везде одинаковый. В этом случае выводится

Egor
29.07.2018
16:59:23
Базару ноль, это довольно странно. Возможно, просто различные версии котлина

Bogdan
29.07.2018
16:59:45

Google

Egor
29.07.2018
17:01:34
Ну, я фиг знает. Mikhail @SchFuntik у вас какие версии котлина стоят?

Mikhail
29.07.2018
17:03:56
у меня тоже пример выше вроде работает

Bogdan
29.07.2018
17:04:20

Mikhail
29.07.2018
17:05:05
1.2.30, но как сказал, пример выше тоже работает

Bogdan
29.07.2018
17:05:37

Anton
29.07.2018
17:06:39
может у тебя где то сапорт фрагмент а где то обычный

Mikhail
29.07.2018
17:07:27
без алсо работает до сих, и фрагменты одинаковые
думаете особенность андроида?

Bogdan
29.07.2018
17:08:45

Mikhail
29.07.2018
17:09:12
дык без also всё работает и даже запускается

Dmitry
29.07.2018
17:53:00
Да, теперь понятно. Вывод типов сейчас в Котлине происходит по отдельности для каждого вызова или встроенной конструкции. Т.е. тут сначала будет выводиться тип для when и только потом для also. И на этапе вывода типов для when компилятор не смог выбрать между I1/I2 (а без also там есть expected type I1, который подсказал)
Мне кажется, это известная проблема, но если несложно, можешь, пожалуйста, отрепортить, раз уж минимизация уже есть? :)


Mikhail
29.07.2018
18:03:49
не думаю что это баг, скорее вполне известное им "наш вывод типов пока недостаточно умён для этого"
на самом деле это фиксится не только отказом от also, но и введением общего типа который соберёт всех одинковых предков выводимых типов в один, и тогда снова всё чудесно выводится.
Помнится на каком-то из докладов говорилось что у них там в внутри компилятора существуют толи union, толи intersection типы. По идее тут можно именно на стадии компиляции вводить типы пересечения которые потом бы кастовались к тому что нужно. Првада если там какая-нибудь сложная иерархия наследования, то не факт что помогло бы. Ну и да, этой мой дилетантский взгляд на проблему, я всё же ни разу не компиляторщик, и в исходниках котлина тоже не бывал :)

Костя
30.07.2018
07:36:12
Добрый день, между вызовами особой разницы нету ?
listener(name)
listener.invoke(name)
где var listener : (String) -> Unit

Alexandr
30.07.2018
07:36:41
никакой разницы

Костя
30.07.2018
07:37:00
второе наверное более читабельно
понял, спасибо

Alexandr
30.07.2018
07:37:14
первый вариант - оператор для ключевого слова invoke
т.е. чисто синтаксический сахар

Google

Alexandr
30.07.2018
07:37:47
как по мне читабильнее первый

Костя
30.07.2018
07:37:59
хм
значит каждому свое, просто заметил что в некоторых примерах люди пишут явно invoke, а я вызов функции писал сразу через скобки

Igor
30.07.2018
07:38:28

Костя
30.07.2018
07:38:31
вот и задумался
но давно уже это было и не правда )

Igor
30.07.2018
07:39:01
Это очевидно, нормальные люди (из скалы / C# / haskell / ...) не вызывают лямбды как интерфесы

Костя
30.07.2018
07:39:28
(
а
ну ладно
)

Alexandr
30.07.2018
07:40:15

Костя
30.07.2018
07:40:32
я тоже кстати ))
просто увидел примеры и задумался, как лучше
а так по наитию сразу вызывал сам через скобки и не думал про это )) как первое что в голову пришло )

Konstantine
30.07.2018
07:41:09

Андрей
30.07.2018
07:41:54
ну тем не менее, смысла же нет invoke() лишний раз писать
выглядит как рудимент от джавовского callable интерфейса

Konstantine
30.07.2018
07:42:27

Google

Андрей
30.07.2018
07:42:28
только там выбора не было, а тут есть

Kirill
30.07.2018
07:42:39
Справедливости ради, лямбда может быть nullable. И тогда есть смысл в func?.invoke()

Konstantine
30.07.2018
07:43:40

Igor
30.07.2018
07:43:48

Alexander
30.07.2018
07:43:58
Явно invoke имеет смысл писать , когда хочется заострить на этом внимание. Я так делаю например когда применяю какой-то DSL билдер, тогда четко видно, что тут идет применение билдера к объекту

Konstantine
30.07.2018
07:44:43

Роман
30.07.2018
07:45:30
не знаю в чём прикол не явных типов

Kirill
30.07.2018
07:45:42

Admin
ERROR: S client not available

Роман
30.07.2018
07:45:50
он сразу у ArrayList'a например выводит List<>, а не ArrayList?

Konstantine
30.07.2018
07:46:15

Kirill
30.07.2018
07:46:54

Роман
30.07.2018
07:47:19

Alexander
30.07.2018
07:47:23

Никита
30.07.2018
07:50:40
Всем доброе утро! Подскажите есть ли у кого-нибудь набор примеров для KDoc? Что в какой ситуации нужно описывать, а что нет?

Alexander
30.07.2018
07:51:37
эээ. Убойный вопрос, но вообще хороший. Я думаю, что в качестве примера хорошо брать документацию kotlin
https://github.com/JetBrains/kotlin/blob/1.2.50/core/builtins/native/kotlin/Primitives.kt#L14
Больше этого не нужно, а то получится как в питоне. Я каждый раз страшно матерюсь, когда читаю питоновскую документацию.

Никита
30.07.2018
07:53:13

Google

Quantum Harmonizer
30.07.2018
07:54:05

Alexander
30.07.2018
07:55:17
Контракты - это немножко overkill наверное. Только для мощного проекта какого-нибудь

Никита
30.07.2018
07:55:34
блин... ну как по мне вот это выглядит диковато
/** Adds the other value to this value. */
public operator fun plus(other: Byte): Long
/** Adds the other value to this value. */
public operator fun plus(other: Short): Long
/** Adds the other value to this value. */
public operator fun plus(other: Int): Long
/** Adds the other value to this value. */
public operator fun plus(other: Long): Long
/** Adds the other value to this value. */
public operator fun plus(other: Float): Float
/** Adds the other value to this value. */
public operator fun plus(other: Double): Double

Quantum Harmonizer
30.07.2018
07:56:10

Alexander
30.07.2018
07:56:11
Да, но для релизной версии оно нужно
Именование файлов какое-то неортодоксальное

Quantum Harmonizer
30.07.2018
07:57:41

Никита
30.07.2018
07:58:48

Alexander
30.07.2018
07:59:04
Я не говорю, что не так, я говорю, что не ортодоксально. Утил файлы с маленькой буквы. В этом что-то есть, но я такого еще не встречал. Дефисы в именах - это вообще что-то новое.

dimiii
30.07.2018
08:00:02
Нужно больше промышленных бизнес фасолин

Quantum Harmonizer
30.07.2018
08:10:18

Alexander
30.07.2018
08:12:19
А почему просто не обзвать их Internal

Quantum Harmonizer
30.07.2018
08:13:21

Alexander
30.07.2018
08:13:37
я про internal модификатор
Или ява его не видит?

Quantum Harmonizer
30.07.2018
08:14:12

Mikhail
30.07.2018
08:14:37

Konstantine
30.07.2018
08:14:46

Konstantin
30.07.2018
08:17:26