
Mikhail
17.10.2018
11:44:43
Надо на android попробовать собрать

Алексей
17.10.2018
11:44:45
Меня вот всегда интересовало - кто все эти люди, которые голосуют в опросах, о которых я слышу только результаты??

Andrey
17.10.2018
11:44:45

Mikhail
17.10.2018
11:45:36

Google

Mikhail
17.10.2018
11:45:54

Andrey
17.10.2018
11:47:53

Хекс
17.10.2018
11:48:10
имеет ли смысл выделять однострочную строку тройными кавычками? часто вижу как иде предлагает переделать конкатинацию строк и переменных в строку с тройными кавычками и ${...}
сам обычно пользуюсь " и $

Mikhail
17.10.2018
11:51:24

Andrey
17.10.2018
11:51:49

Хекс
17.10.2018
11:52:16
хотя наверно это из-за того что решили не читать есть ли в строке \n

Vladimir
17.10.2018
14:32:45

Mikhail
17.10.2018
14:35:52
надо писать KEEP

Roman
17.10.2018
14:36:25

Google

Vladimir
17.10.2018
14:36:48
пока
Есть идеи, что с этим делать?
Я имею в виду с тем, что в Java-коде можно менять содержимое инлайн-класса

Руслан
17.10.2018
14:38:54

Roman
17.10.2018
14:38:58
С этим ничего не сделать. Если боитесь что из Java кода кто-то будет менять, то не используейте inline classes.
Но вообще мы тут подстели соломки. Никакую фукнцию которая принимат паметр типа "inline class" нельзя вызвать из Java

Vladimir
17.10.2018
14:39:56

Quantum Harmonizer
17.10.2018
14:40:26
Изначальный вопрос решается использованием энамов.

Roman
17.10.2018
14:40:47
Не забить. Есть защита. От reflection, конечно, не защиться. Но на reflection забъем (с помощью него вообще много чего можно сломать)

Vladimir
17.10.2018
14:41:13
Отлично!

Andrey
17.10.2018
14:42:40
inline class, судя по описанию, то же самое, что и newtype в Haskell. То есть просто способ на уровне системы типов различить оборачиваемое значение и обёрнутое.
Зачем вам тогда фабричный метод для него? Чем просто использование конструктора не устраивает?

Mikhail
17.10.2018
14:43:51

Vladimir
17.10.2018
14:44:13

Andrey
17.10.2018
14:44:21
То есть inline class по идее существует только во время компиляции. В рантайме он полностью заменяется обёрнутым значением

Mikhail
17.10.2018
14:44:28
так бы был фабричный метод, возвращающий String50CharacterLong?

Andrey
17.10.2018
14:44:48

Mikhail
17.10.2018
14:44:56
как ето
почему нет?
по-моему, отличный юзкейс
или, например, inline class ValidSomething

Andrey
17.10.2018
14:46:19
Но делали-то его не под этот юз кейс

Google

Andrey
17.10.2018
14:51:21
Это просто способ дописать свою реализацию для чего-то, что уже реализовано иначе в оборачиваемом типе.
Вот хочется вам, чтобы для текстов length не учитывал пробельные символы и пунктуацию, но length для String уже работает иначе. Вы делаете inline class Text(val s: String) и реализуете свой length в нём
При этом, после компиляции, всё кроме length будет работать напрямую с обёрнутой строкой, и нет оверхеда на создание Text
https://kotlinlang.org/docs/reference/inline-classes.html
Вот тут вроде всё очень подробно и с примерами описано.
Написано, зачем нужно, как работает.

Quantum Harmonizer
17.10.2018
15:00:03

Boris
17.10.2018
15:00:27

Mikhail
17.10.2018
15:00:51

Andrey
17.10.2018
15:01:04
и не для этого, ящитаю
Ну вы почитайте документацию и примеры. Там как раз для этого и используют.
Наверно разработчикам языка виднее, зачем они ту или иную фичу реализуют.

Mikhail
17.10.2018
15:01:23
а для чего?
прежде всего, для того чтобы "натянуть домен на типы"

Andrey
17.10.2018
15:01:49

Mikhail
17.10.2018
15:01:58
избавиться от "dialogId: String, messageId: String, botId: String"

Quantum Harmonizer
17.10.2018
15:02:00
а для чего?
Чтобы представить существующий тип как вообще другой тип, безо всего его поведения.
Например, обернуть ключи — в UserId, ClientId, ЛюбойДругойId завернуть UUID.

Mikhail
17.10.2018
15:02:51

Boris
17.10.2018
15:02:59
или, чтобы количество методов в корутине сократить до одного ?

Andrey
17.10.2018
15:03:08

Quantum Harmonizer
17.10.2018
15:03:26

Mikhail
17.10.2018
15:03:32

Quantum Harmonizer
17.10.2018
15:03:44

Mikhail
17.10.2018
15:04:09

Boris
17.10.2018
15:04:22
ну, безопасный тайпалиас всяко лучше, чем тот, что пропускает замену типов и непозволяет инкапсулировать поведение обрачиваемого класса

Mikhail
17.10.2018
15:04:29
на самом деле они хороши для всех трех случаев

Google

Andrey
17.10.2018
15:04:37

Mikhail
17.10.2018
15:05:09

Quantum Harmonizer
17.10.2018
15:05:43
нет, просто в другой таблице для такого id не будет записи

Boris
17.10.2018
15:05:52
поведение самого объекта совершенно не обязательно должно быть разным, поведение кода, который с этим объектом работает может сильно отличаться

Mikhail
17.10.2018
15:06:10
это, имхо, разное поведение

Admin
ERROR: S client not available

Boris
17.10.2018
15:08:03
поведением обычно называют набор методов, интерфейс, а интерфейс как раз может быть абсолютно одинаковый, типа toUUID() ?
и возвращать они просто будет uuid, но вот спутать их в исопльзуемом коде уже будет невозможно
в отличии от тайпалиаса
я так думаю, что только из за одного кейза врядли стали бы вводить целый новый класс, скорее всего была идея решить целый спект задач

Mikhail
17.10.2018
15:09:50

Boris
17.10.2018
15:10:26
поэтому оно и назыается поведением, а не интерфейсом в привычном понимании
да это спор о терминах
суть в том, что классы могут быть абсолютно идентичны, но использоваться по-разному и это кейз для инлайн-классов

Andrey
17.10.2018
15:15:10
На примере разных Id:
Есть у вас задача: доставать имя по Id. При этом для СlientId надо доставать из одного источника, для UserId из другого, но все они UUID.
Если просто передавать UUID - не ясно, откуда брать имя. Если есть inline class - пишем
val ClientId.name
get() {...}
val UserId.name
get() {...}
Вот у нас и реализовано разное поведение, в зависимости от типа Id
Без inline class тоже всё это можно, но будет оверхэд на создание обёрток.

Boris
17.10.2018
15:19:10
мне кажется, что главная фича, это что инлайн-класс может инкапсулировать в себе тип оборачиваемого объекта и предоставлять специфичный интерфейс без потерь на инстанцировании враппера

Quantum Harmonizer
17.10.2018
15:39:20

Google

Quantum Harmonizer
17.10.2018
15:39:55
Интересно, а если inline class оборачивает примитив, его можно сделать const val? ?

Boris
17.10.2018
15:40:33

Quantum Harmonizer
17.10.2018
15:41:04
нельзя ?

Andrey
17.10.2018
15:41:29

Quantum Harmonizer
17.10.2018
15:42:03

Boris
17.10.2018
16:18:02
а rc версии грейдл-плагинов где лежат?
cline-овый грейдл чот странно как-то дружит с билд-файлами на котлине
точнее сказать, никак не дружит

Larymar
17.10.2018
17:22:43
если что это андроид, но к сожалению там все молчат

Андрей
17.10.2018
17:23:48
а так кастить в байт массив легально вообще?

Larymar
17.10.2018
17:24:11

Bogdan
17.10.2018
17:47:49
Какие есть гарантии что Array<Float> c оптимизируется в FloatArray ?

Mikhail
17.10.2018
17:48:10

Bogdan
17.10.2018
17:49:46

Larymar
17.10.2018
17:50:18

Leonid
17.10.2018
17:50:35
Да не умеет он так