@kotlin_lang

Страница 870 из 982
Quantum Harmonizer
17.09.2018
08:53:41
почему-то последнее время Gson у меня ассоциируется с некрофилией

Friedrich
17.09.2018
08:54:46
А что вместо него?

Alexandr
17.09.2018
08:56:03
jackson

у него и поддержка котлина уже из коробки

Google
Boris
17.09.2018
08:56:57
Гсон вроде для андроида используют, джексон немного для этого жЫрноват

Friedrich
17.09.2018
08:57:30
у него и поддержка котлина уже из коробки
О, это позитивные новости, спасибо.

То есть дата-классы он норм схавает?

Alexandr
17.09.2018
08:58:07
да

Виктор
17.09.2018
08:58:11
moshi, мб? тоже поддержка котлина из коробки и от square

Alexandr
17.09.2018
08:58:21
толкьо надо подручить еще jackson-kotlin зависимость

Quantum Harmonizer
17.09.2018
08:58:39
это не называется «из коробки»

Boris
17.09.2018
08:58:46
А если для бэкэнда, то я всегда джексон беру. У него не только поддержка котлина, но и ямла, хмл-а, джава.тайм и тд

Alexandr
17.09.2018
08:58:54
я думаю до джексона по фичам всем далековато будет, это комбаин

Boris
17.09.2018
09:00:12
И да, очень богатые возможности расширения и куча готовых расширений которые не надо тащить если не надо

Igor
17.09.2018
09:10:13
Никто, кроме безумного автора сих строк, не в силах понять, будет это работать или нет.
Да нет, я просто не особо много с проекциями типов работал, тут скорее по этой части вопрос – будет ли нормально идти матчинг, или потрется все до Any и я буду вечно первый десериализатор ловить.

Igor
17.09.2018
10:50:06
Прикол, а SuccessOrFailure<T> оказывается переименовали в Result<T>

Google
Konstantin
17.09.2018
10:56:08
А кто-нибудь знает, может как-то можно нормально протестировать код с корутинами с учетом асинхронности? Условно, есть презентер, внутри которого запускается корутина, хочется проверить, что в зависимости от результата вызываются нужные методы. Несмотря на то, что Сами Deferred замоканы как GlobalScope.async { value } получилось протестировать только так @Test fun test() = runBlocking { val presenter = ... // setup presenter.action() delay(100) verify(...) }

Как-то можно от delay избавиться?

Quantum Harmonizer
17.09.2018
10:57:22
yield()

Kirill
17.09.2018
10:57:50
Написать кастомный шедулер?

OlegKrikun
17.09.2018
11:07:05
Igor
17.09.2018
11:07:32
Хде? В м2 вроде нет ещё
https://github.com/JetBrains/kotlin/commit/feb7239189e73733e0527da7ffc1751a8dda9d15

Igor
17.09.2018
11:09:05
yield()
Можно подробнее?

Konstantin
17.09.2018
11:09:21
Написать кастомный шедулер?
Не знаю, может как раз проблема в том, чт я использую Dispatchers.Unconfined

Quantum Harmonizer
17.09.2018
11:09:31
Можно подробнее?
ну, в корутинах есть функция, которая суспендит корутину, уступая пул другим

Konstantin
17.09.2018
11:13:29
ну, в корутинах есть функция, которая суспендит корутину, уступая пул другим
А как это может помочь? проблема в том, что verify выполняется раньше, чем действие завершилось

для RX у нас был advanceBy, но здесь delay реально застопит выполнение теста

Quantum Harmonizer
17.09.2018
11:14:00
Konstantin
17.09.2018
11:14:36
Ну само действие — чтение из базы, но я его мокаю в этом тесте.

Quantum Harmonizer
17.09.2018
11:15:01
Ну то есть оно синхронное и мгновенное?

Konstantin
17.09.2018
11:17:03
Должно быть да

Вроде спасает добавление join'ов на Deferred, но получается слишком многословно как-то

Mikhail
17.09.2018
11:43:05
Alexandr
17.09.2018
11:45:40
Вроде спасает добавление join'ов на Deferred, но получается слишком многословно как-то
так то это правильное решение и я бы не сказал что многословное

мало кода != правильно != читаемо

Google
Konstantin
17.09.2018
11:51:39
мало кода != правильно != читаемо
Просто получается сетап теста получается провести только в самом тесте и по объему сопоставимо с полезной нагрузкой в тесте. Но я уже знаю, как сделать лучше

Ivan
17.09.2018
11:51:50
Вроде спасает добавление join'ов на Deferred, но получается слишком многословно как-то
Вам просто нужно в моке сделать какой-нибудь летч и ожидать его

Ivan
17.09.2018
11:52:38
Тоже вариант, спасибо
Самый действенный вариант по моей практике

akniyet
17.09.2018
12:07:18
у кого нибудь есть тестовый проект с корутинами и с Clean Arch?(Новичок)

Никита?❄️
17.09.2018
12:09:32
а, clean arch это про андроид. сорян, у меня spring там

Mikhail
17.09.2018
12:11:09
но они просто отвратительны

Vitalii
17.09.2018
12:12:08
у кого нибудь есть тестовый проект с корутинами и с Clean Arch?(Новичок)
Ну, ты можешь смотреть примеры с Clean Architecture, но без корутин, поиграться и самостоятельно переписать общение между слоями на корутины. Это не должно быть сложно. И отдельно смотреть примеры кода с корутинами.

Igor
17.09.2018
12:12:51
у кого нибудь есть тестовый проект с корутинами и с Clean Arch?(Новичок)
(это также, как без корутин, только с корутинами (вместо колбеков))

Vitalii
17.09.2018
12:13:16
(это также, как без корутин, только с корутинами (вместо колбеков))
s/коллбеков/любого другого способа связывать слои/g

akniyet
17.09.2018
12:14:15
Я видел недавнее обновление, и не совсем понял, вроде все корутинбилдеры выпилили

Igor
17.09.2018
12:15:36
а flatMap так и не приделали?
https://github.com/JetBrains/kotlin/blob/master/libraries/stdlib/coroutines/src/kotlin/Result.kt вроде все также (те нет)

Виктор
17.09.2018
12:16:24
Я видел недавнее обновление, и не совсем понял, вроде все корутинбилдеры выпилили
не выпилили, просто добавили явно от кого они работают, от GlobalScope. или от другого билдера (как обычно)

Google
Igor
17.09.2018
12:21:15
придется экстеншн запилить
подумой ? а если ли смысл (это же не идиоматичный котлин получается) P.S. почему все натягивают (котлин) сову-на-глобус, а не берут подходящий язык ?

Mikhail
17.09.2018
12:22:45
потому что легче натянуть котлин на глобус, чем заставить что-нибудь работать под андроид

и под соусом котлина легче продать сову на глобусе

Igor
17.09.2018
12:28:12
и под соусом котлина легче продать сову на глобусе
А ты думаешь для "обычных продакшен программ", имеет смысл упарываться монадами/arrow в неприспобленном языке? (немножко похоже не карго-культ) (для НЕ продакшен - можно на чем угодно же писать)

Георгий
17.09.2018
12:29:21
и под соусом котлина легче продать сову на глобусе
На привьюшке этого сообщения я прям заинтересовался))

Mikhail
17.09.2018
12:31:01
и о какой предметной области идет речь

Andrey
17.09.2018
12:31:41
А ты думаешь для "обычных продакшен программ", имеет смысл упарываться монадами/arrow в неприспобленном языке? (немножко похоже не карго-культ) (для НЕ продакшен - можно на чем угодно же писать)
Вы так говорите, будто математику функторов, аппликативов, монад и прочего (теорию категорий) не для построения корректных абстракций придумали, а так, по фану. Ну дак это не верно.

Igor
17.09.2018
12:32:04
Admin
ERROR: S client not available

Vitalii
17.09.2018
12:32:43
mobile/интерпрайз - "простые информационные системы"
Пока там есть обработка данных, там могут понадобиться эти ваши "совы-на-глобусе".

Vitalii
17.09.2018
12:34:00
и о какой предметной области идет речь
Ну и вот это тоже определяющий фактор.

Andrey
17.09.2018
12:34:01
Вы читаете между строк (то что хотите видить видимо), совершенно не то что я сказал
Ну отвечая на вопрос о смысле "упарываться": смысл в том, чтобы программировать в математически корректных, выверенных абстракциях, с хорошо определённым поведением.

Alexander
17.09.2018
12:34:56
Вы так говорите, будто математику функторов, аппликативов, монад и прочего (теорию категорий) не для построения корректных абстракций придумали, а так, по фану. Ну дак это не верно.
Ну придумали, их, предположим, как раз таки по фану. Никто не сомневается в том, что можно писать код "по науке". Вопрос в том, нужно ли.

Ну отвечая на вопрос о смысле "упарываться": смысл в том, чтобы программировать в математически корректных, выверенных абстракциях, с хорошо определённым поведением.
А пример можно? Вот какой-то реально работающей программы не на хаскеле "в математически корректных, выверенных абстракциях, с хорошо определённым поведением"?

Pavel
17.09.2018
12:36:45
??
и запусти это на андроид ?

Alexander
17.09.2018
12:37:35
Про хаскель вопрос отдельный. Я давно пришел к выводу о том, что человек, который способен читать, а тем более писать на нем код - такой крутой программист, что может писть хоть на бэйсике.

Google
Mikhail
17.09.2018
12:39:17
mobile/интерпрайз - "простые информационные системы"
я тут строчил большой ответ, но потом передумал поддаваться на провокации

Alexander
17.09.2018
12:40:40
Ну sequence в Kotlin - воплне себе пример удобной и нужной монады.
Последовательноти на котлине прямым образом наследуют стримы в яве, корнями уходят в дофункциональную эпоху. Для их понимания математика не нужна вообще.

И круто если он будет писать на хаскеле (=> идрисе => коке/агде) дальше, а не котлине
Согласен. Обычно у них к этому мозг выворачиваетя и они начинают городить какие-то сложные конструкции чтобы имитировать чистый язык на том же котлине.

Тот же паттерн матчинг

Mikhail
17.09.2018
12:43:50
Чтобы писать на хаскелл математика не нужна

ни теория категорий, ни абстрактная алгебра

Andrey
17.09.2018
12:44:10
Последовательноти на котлине прямым образом наследуют стримы в яве, корнями уходят в дофункциональную эпоху. Для их понимания математика не нужна вообще.
Ну для понимания большинства монад математика не особо нужна. Она нужна, если надо свою монаду реализовать. Иначе получается как с Optional в Java - формально реализует монаду, но ассоциативности у map нету, в результате цепочку из нескольких map вызовов лучше вообще не рефакторить, если работает, иначе сломается.

Mikhail
17.09.2018
12:46:40
Тот же паттерн матчинг
паттер матчинг - приятный сахарок, в нем нет никаких сложностей

Igor
17.09.2018
12:47:10
я тут строчил большой ответ, но потом передумал поддаваться на провокации
И правильно)) Я вообще не против фп, а только за идиоматичность, "простоту" и баланс (его нащупать гораздо сложнее, чем сгородить лес из монад и трансформеров).

Andrey
17.09.2018
12:47:34
Чтобы писать на хаскелл математика не нужна
Оксюморон получается. Любые языки программирования - формальные системы, из которых, по возможности, удалена неоднозначность, со строгими правилами синтаксиса. То есть, по сути, это математические формализмы. Если вы не будете называть математику математикой, она он этого не станет чем-то другим.

Alexander
17.09.2018
12:47:38
паттер матчинг - приятный сахарок, в нем нет никаких сложностей
Просто было уже несколько не самых удачных попыток протащить его в котлин. Типа без него не едят

Mikhail
17.09.2018
12:49:38
Просто было уже несколько не самых удачных попыток протащить его в котлин. Типа без него не едят
просто в Kotlin есть when (value) { is Something -> } многие, кто сталкивался с паттерн-матчингом думают: "его чуть-чуть докрутить и будет мощная штука из языка Х которой мне так нравилось пользоваться". Если бы сделали простой switch никто бы не топил за паттерн-матчинг так сильно

Alexander
17.09.2018
12:50:41
Не думаю

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

Andrey
17.09.2018
12:53:12
Просто было уже несколько не самых удачных попыток протащить его в котлин. Типа без него не едят
Ну в текущем виде в Kotlin есть очень ограниченный pattern destructuring (не работает в случае nested destructuring). Вообще pattern matchig - неотъемлемая часть типа альтернативы в типизированном лямбда исчислении. Так что его пытаются протащить не по привычке, а так как есть поддержка типизированных лямбд и есть поддержка альтенатив (sealed classes)

Alexander
17.09.2018
12:53:47
Проблема в том, что в ктолине не нужно лямбда-исчисление

Alexander
17.09.2018
12:54:04
Вполне хватает обычной клеточной тьюринг-полноты

А зачем?

Igor
17.09.2018
12:54:48
просто в Kotlin есть when (value) { is Something -> } многие, кто сталкивался с паттерн-матчингом думают: "его чуть-чуть докрутить и будет мощная штука из языка Х которой мне так нравилось пользоваться". Если бы сделали простой switch никто бы не топил за паттерн-матчинг так сильно
Имхо основной плюс when, в "полноте разбора вариантов", без него он и не особо полезен (и никак не решает exp-problem). Да и в языках с норм ПМ, всеравно часто используют полиморфизм (в разных видах).

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