@kotlin_lang

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

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
не знаю на сколько одинаковый случай

где тут примитивы:?
это уже вотрой вариант

Не очень понимаю. Одинаковые примитивы?
вместо A, B,C -> 1, 2, 3. Возращаемый тип был Int

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

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

Bogdan
29.07.2018
16:59:45
apply пробывал ?
хотя мало погоды поменяет

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

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

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

Bogdan
29.07.2018
17:05:37
у меня тоже пример выше вроде работает
просто не с андроида и не знаю про Fragment, может тебе в @kotlin_mobile, хотя народ +- один и тот же

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

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

думаете особенность андроида?

Bogdan
29.07.2018
17:08:45
думаете особенность андроида?
нет я думаю что где-то нет Fragment как родителя

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
Справедливости ради, лямбда может быть nullable. И тогда есть смысл в func?.invoke()
Idea вроде сама поругает, если налабл вызвать как функцию.

Igor
30.07.2018
07:43:48
"явное лучше неявного" )
Ох уж эти мантры джавистов. Может тебе и val "не явный", он же тип скрывает

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

Konstantine
30.07.2018
07:44:43
Ох уж эти мантры джавистов. Может тебе и val "не явный", он же тип скрывает
Питонистов. От случая к случаю - иногда оно и правда мешает понять, что там. Но благо студия уже умеет добавлять тип в вывод.

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

Admin
ERROR: S client not available

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

Konstantine
30.07.2018
07:46:15
TFW, говорят "студия умеет", хотя на самом деле "идея умеет" *sad frog.jpg*
Idea могет больше, чем студия, ибо вторая опаздывает, поэтому отделяю.

он сразу у ArrayList'a например выводит List<>, а не ArrayList?
Нет, но можно явно указать, если нужно.

Роман
30.07.2018
07:47:19
Нет, но можно явно указать, если нужно.
в общем не нужно в коллекциях лишь навредит

Alexander
30.07.2018
07:47:23
он сразу у ArrayList'a например выводит List<>, а не ArrayList?
Если тип не указан явно, пишет серым то, что язык выводит

Никита
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
эээ. Убойный вопрос, но вообще хороший. Я думаю, что в качестве примера хорошо брать документацию kotlin
хм, да, что-то про неё не подумал, просто почитал https://kotlinlang.org/docs/reference/kotlin-doc.html и пошел гуглить... Спасибо :)

Google
Quantum Harmonizer
30.07.2018
07:54:05
эээ. Убойный вопрос, но вообще хороший. Я думаю, что в качестве примера хорошо брать документацию kotlin
Все public и protected. В интерфейсах — контракты, в классах — детали реализации.

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
Всем доброе утро! Подскажите есть ли у кого-нибудь набор примеров для KDoc? Что в какой ситуации нужно описывать, а что нет?
я вот как-то так делаю, см. файлы с этом каталоге https://github.com/Miha-x64/reactive-properties/tree/master/properties/src/main/kotlin/net/aquadc/properties

Alexander
30.07.2018
07:56:11
Да, но для релизной версии оно нужно

Именование файлов какое-то неортодоксальное

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

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

Quantum Harmonizer
30.07.2018
08:10:18
Я не говорю, что не так, я говорю, что не ортодоксально. Утил файлы с маленькой буквы. В этом что-то есть, но я такого еще не встречал. Дефисы в именах - это вообще что-то новое.
с большой называю классы :) Дефисы — чтобы internal-классы были неюзабеьлны из джавушки. Кажется, мой пропозал на @JvmSynthetic для классов не оценили. https://youtrack.jetbrains.com/issue/KT-24981

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

Quantum Harmonizer
30.07.2018
08:13:21
А почему просто не обзвать их Internal
ну, они, конечно, лежат в internal, но когда это кого останавливало?)

Alexander
30.07.2018
08:13:37
я про internal модификатор

Или ява его не видит?

Quantum Harmonizer
30.07.2018
08:14:12
я про internal модификатор
В яве это паблик

Mikhail
30.07.2018
08:14:37
Konstantine
30.07.2018
08:14:46
Konstantin
30.07.2018
08:17:26
Это ж из питона
это бест практис оф эни ленгвидж

Страница 779 из 982