@kotlin_lang

Страница 192 из 982
Anton
16.06.2017
12:20:42
супер!!

Dmitry
16.06.2017
12:20:45
Дружит. Но классы нужно делать open, так как realm не дружит с final классами

Михаил
16.06.2017
12:20:47
правда датаклассы не получится юзать с ним

Anton
16.06.2017
12:20:51
бля

Google
Anton
16.06.2017
12:20:54
я как раз про дата подумла

Михаил
16.06.2017
12:21:29
хотя может щас можно. я еще на 1.0 котлина пробовал

когда нельзя была наследовать датаклассы

Dmitry
16.06.2017
12:22:51
Нет, сейчас тоже нельзя.

Николай
16.06.2017
13:01:01
А кто скажет в чем прикол sealed классов?

Quantum Harmonizer
16.06.2017
13:01:52
А кто скажет в чем прикол sealed классов?
В том, что компилятор может гарантировать, что все наследники заранее известны.

Михаил
16.06.2017
13:04:27
На этом приколы заканчиваются

Николай
16.06.2017
13:04:56
И что это даёт?

Quantum Harmonizer
16.06.2017
13:05:58
И что это даёт?
when, гарантирующий, что все варианты будут перебраны, например (exhaistive when)

Anton
16.06.2017
13:11:43
прикол

дефолт кейс не нужно указывать это серьезно весь прикол?

Quantum Harmonizer
16.06.2017
13:13:17
дефолт кейс не нужно указывать это серьезно весь прикол?
Прикол не в том, что не нужно указывать, а в том, что код без дефолт-кейса не скомпилируется, пока не перечислишь все варианты.

Anton
16.06.2017
13:13:23
ну да

Google
Anton
16.06.2017
13:13:30
я имел в виду этот прикол

Quantum Harmonizer
16.06.2017
13:13:35
Это недостаточно круто?)

Igor
16.06.2017
13:13:50
дефолт кейс не нужно указывать это серьезно весь прикол?
Тебе мало этого? Это решает expression problem и можно добавлять операции, не изменяя классы.

Anton
16.06.2017
13:14:01
достаточно прикольно!

Quantum Harmonizer
16.06.2017
13:14:38
Есть пример?
маркер-интерфейс Type из java.lang.reflect ?

Igor
16.06.2017
13:15:26
Есть пример?
У Бреслава есть пример на youtube с Expr Num Var (взятый конечно из scala)

Quantum Harmonizer
16.06.2017
13:15:40
Есть пример?
Классика: sealed class Option<out T : Any> class Some<T : Any>(val value: T) : Option<T>() object None : Option<Nothing>()

Михаил
16.06.2017
13:17:12
У Бреслава есть пример на youtube с Expr Num Var (взятый конечно из scala)
Я этот пример что раз видел но арименения не нашел. Мб мозг не в том направлении рвботает

Igor
16.06.2017
13:17:12
Ему вообще хрен знает сколько лет. Одерски его скорее всего тоже откуда то взял.

Я этот пример что раз видел но арименения не нашел. Мб мозг не в том направлении рвботает
Если у тебя ООП (г̶о̶л̶о̶в̶н̶о̶г̶о̶ ̶м̶о̶з̶г̶а̶ ?), то тебе и не нужно. В ООП свои механизмы.

Igor
16.06.2017
13:19:52
Как в истинном ООП это сделать?
Визитор, это же Бреслав и говорил в том видосике "Андрей Бреслав. Функции и данные в Kotlin"

Михаил
16.06.2017
13:20:02
Quantum Harmonizer
16.06.2017
13:20:41
Igor
16.06.2017
13:22:53
Что-то сложный вопрос “данные по л(м?) иморфного формата” ? - что это такое?

? animufag ?
16.06.2017
13:25:59
ну тема в том что каждый случай передачи данных – случай их дальнешей обработки. поэтому вместо того чтобы на месте захватывать скоп и обрабатывать в when добавляешь метод в интерфейс, в который передаёшь нужный на текущий момент скоп. реализуешь обработку этих полиморфмных данных в классах.

гибкость when в том что это можно сделать лаконичней

ну и более явно когда читаешь код

Google
Quantum Harmonizer
16.06.2017
13:28:12
Что-то сложный вопрос “данные по л(м?) иморфного формата” ? - что это такое?
Допустим, за привлечение проекта вознаградить можно процентом от продажи либо фиксированной суммой. sealed class Earning { class Percent(val value: Double) : Earning() class Fixed(val value: Double) : Earning() } Как это правильно делается в ООП? Если маркер-интерфейсом (java.lang.reflect.Type ?), то нет никакой гарантии, что не появится новый вариант и свитчи не поломаются.

? animufag ?
16.06.2017
13:29:35
вообще не понимаю про маркер интерфейсы. ну само выражение примерно понимаю, но как они заменяют свитчи - хз

на самом деле немного плохо для примера, что у них одинаковое содержимое. а ещё я вспомнил тут был огромный разговор про ооп ровно о том же самом

Quantum Harmonizer
16.06.2017
13:34:08
вообще не понимаю про маркер интерфейсы. ну само выражение примерно понимаю, но как они заменяют свитчи - хз
Ну, тот пример, который я два раза пытаюсь привести: интерфейс Type не несёт никакого контракта и нет явного способа гарантировать проверку всех возможных его реализаций — Class, ParameterizedType, ArrayType и т. д..

Quantum Harmonizer
16.06.2017
13:35:56
Ну так и нужно поступать в ООП стиле (по заветам Егора) https://i.gyazo.com/7b9c043248bdcc54bd5d64d91df1aa03.png
User может находиться в таком слое, что Reward не будет ничего о нём знать.

Я всё же считаю, что пассивные объекты тоже имеют право на жизнь.

Igor
16.06.2017
13:37:00
Ну это уже ваши частные проблемы архитектуры. Можно в @Android_Architecture что они там думают. (Я вообще за ФП в Kotlin)

? animufag ?
16.06.2017
13:37:47
User может находиться в таком слое, что Reward не будет ничего о нём знать.
так всё равно ты как-нибудь дойдёшь до такого скопа что user и earning встретятся и на месте обработаешь данные для двух случаев earning

Quantum Harmonizer
16.06.2017
13:39:32
enum)
У enum данные не полиморфные. Получается, что за каждым элементом enum нужно закреплять класс, и, о ужас, кастить данные в него.

Quantum Harmonizer
16.06.2017
13:40:14
btw, вчера на митапе в Питере ruX показывал отличные примеры с sealed классами.

Igor
16.06.2017
13:45:35
Я выше уже упоминал про паттерн (костыль) - Visitor, вроде подходит. Там можно вообще какие угодно операции намутить в будущем (супер расширяемость и гибкость). Плюс он быстрее ”when” из-за прямого диспатчинга.

Volodymyr
16.06.2017
14:07:29
* What went wrong: Execution failed for task ':app:transformClassesWithJarMergingFor<FlavorName>Debug'. > com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: org/xmlpull/v1/XmlPullParser.class HELP

Denis
16.06.2017
14:12:27
XmlPullParser через либу подключен?

Volodymyr
16.06.2017
14:18:13
нет https://gist.github.com/jordan1997/b6c7bedbb39eeecce51e1515db492bdbє но http://prntscr.com/fkj8x9

Nick Senchurin
16.06.2017
14:18:39
:app:dependencies не помогло?

Igor
16.06.2017
14:19:55
Google
Volodymyr
16.06.2017
14:21:44
https://gist.githubusercontent.com/jordan1997/b6c7bedbb39eeecce51e1515db492bdb/raw/a3dc6ee0086f4285602060bcc7e3c1acc1771e96/gistfile1.txt

а так?

Igor
16.06.2017
14:22:02
Не открывается.
https://gist.github.com/jordan1997/b6c7bedbb39eeecce51e1515db492bdb

Denis
16.06.2017
14:22:04
Да тут и так все ясно. Идет конфликт с Андройдовским XmlPullParser.

Volodymyr
16.06.2017
14:22:42
как фіксить?

Denis
16.06.2017
14:23:05
А оказаться ни как?

Admin
ERROR: S client not available

Quantum Harmonizer
16.06.2017
14:23:08
Да тут и так все ясно. Идет конфликт с Андройдовским XmlPullParser.
Это ясно и без build.gradle. А вот какие библиотеки его втащили?

Volodymyr
16.06.2017
14:26:01
ситуация такая что тесты на ява а код на Котлин ошибку на следующую команду /gradlew —no-daemon ":app:assemble<FlavorNaem>DebugAndroidTest" ":app:assemble<FlavorName>Debug"

Михаил
16.06.2017
14:27:06
:app:assemble<FlavorNaem>DebugAndroidTest"

FlavorNaem

Quantum Harmonizer
16.06.2017
14:27:18
В libs есть что-нибудь?

Короче, нужно смотреть граф зависимостей и выяснять, кто притащил парсер.

Volodymyr
16.06.2017
14:29:12
В libs есть что-нибудь?
да http://prntscr.com/fkjdvl это мои

Quantum Harmonizer
16.06.2017
14:29:51
Нет ли в них этого парсера?

Volodymyr
16.06.2017
14:30:52
есть но к переводу проекта на Котлин все было ок

Quantum Harmonizer
16.06.2017
14:31:35
есть но к переводу проекта на Котлин все было ок
мб после перехода он полностью пересобрался и проблема всплыла.

Volodymyr
16.06.2017
14:32:25
это CI машина

ок как решить я не могу просто удалить xmlParse из библиотек?

Google
Denis
16.06.2017
14:37:19
Давайте глянем внимательней на список зависимостей Запустите градловую таску dependencies найти ее можно вот тут https://snag.gy/iz0Ace.jpg

Как выполнится, скидывайте логи. Посмотрим какая из либ шалит

Volodymyr
16.06.2017
14:40:40
http://prntscr.com/fkjjjv

а так если от app

Quantum Harmonizer
16.06.2017
14:44:05
парсер есть в powermock и в какой-то из подключённых библиотек. Нужно убрать его откуда-то.

Denis
16.06.2017
14:45:07
Вот тут +--- org.powermock:powermock-classloading-xstream:1.6.4 | +--- org.powermock:powermock-classloading-base:1.6.4 (*) | \--- com.thoughtworks.xstream:xstream:1.4.2 | +--- xmlpull:xmlpull:1.1.3.1 | \--- xpp3:xpp3_min:1.1.4c

Что забавно, его нет в списке зависимостей, что вы скидывали ранее. Я так понимаю, вы почистили его от тестовых зависимостей?

Volodymyr
16.06.2017
14:57:23
да

Тест https://gist.github.com/3e17312da1651decd46b529c982dacc9.git

как убрать из powerMock ?

@sdi_linch можете подсказать?

Denis
16.06.2017
15:05:57
Можно попробовать исключить xmlpull из зависимостей. Но в данном случае я не ручаюсь за работоспособность тестов

Дело в том, что тут идет конфликт имен а не простой конфликт версий. Скорее всего xstream использует методы и классы отсутствующие в Android

Советю присмотреться к другим решениям

Семен
16.06.2017
15:12:19
а вот такой вопрос, кто ретрофитом пользуется, все модельки nullable типизируете?

Михаил
16.06.2017
15:12:57
нет. зачем

Семен
16.06.2017
15:13:19
а как? надеятся на бек?

и падать по любому чиху

Михаил
16.06.2017
15:13:58
как вариант свои мапервы для каждой модели писать

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