Size: a a a

2020 April 14

AN

Alexander Nozik in Kotlin Moscow
Maxim Zinchenko
ну и такие решения хороши, когда уже модель есть. а если модель меняется постоянно и неизвестно какие вещи захочется завтра посчитать? жалко терять исходную информацию, это же самое ценное
Если нет проблем с перформансом, то пожалуйста. Но повторюсь. Бигдецималы на порядок дороже примитивов
источник

MZ

Maxim Zinchenko in Kotlin Moscow
Alexander Nozik
Ну так библиотека этих экстеншенов для всего этого на весь агромадных проект пишется за день. Я не очень понимаю, зачем все с стдлибе
тут почти согласен. может не за день, но за неделю пишется. а проблема в том, что для некоторых вещей из-за этого нет стандарта. например, иерархические данные подчёркнуто игнорятся в JRE. из-за этого существует бешенное количество разных вариаций с разным интерфейсом. представьте, что в JRE не было бы Iterable или Collection. если вам нужен ArrayList - так он пишется за пару часов. нафига он в JRE?
источник

AN

Alexander Nozik in Kotlin Moscow
Maxim Zinchenko
тут почти согласен. может не за день, но за неделю пишется. а проблема в том, что для некоторых вещей из-за этого нет стандарта. например, иерархические данные подчёркнуто игнорятся в JRE. из-за этого существует бешенное количество разных вариаций с разным интерфейсом. представьте, что в JRE не было бы Iterable или Collection. если вам нужен ArrayList - так он пишется за пару часов. нафига он в JRE?
Стандарты - это разумеется важно. Скажем, kmath и делается как хаб для стандартизации математики. Но если у вас какая-то специфичная логика или подстраиваться под себя или делать общеизвестную либу
источник

MZ

Maxim Zinchenko in Kotlin Moscow
Alexander Nozik
Если нет проблем с перформансом, то пожалуйста. Но повторюсь. Бигдецималы на порядок дороже примитивов
не надо на них ничего считать серьёзного. но чтобы подготовить данные, обычно их приходится слегка корячить. в основном это делается в sql, но кое-что в sql практически нереально сделать и приходится делать в kotlin
источник
2020 April 15

MZ

Maxim Zinchenko in Kotlin Moscow
вопрос знатокам. не появилось ли вменяемого решения для работы с делегированными полями (в основном касается Lazy как часто используемого) при сериализации-десериализации.
есть https://youtrack.jetbrains.com/issue/KT-11837 и куча всяких смежных, но ему вроде как 4 года, а воз и ныне там.
пока что мы используем кастомную сериализацию-десериализацию, причём рукописную и реализованную отдельно для разных целей (jackson, gson, eclipselink, hibernate).
может есть какой-то более вменяемый workaround, потому и не делают ничего? понятно, что очевидный вариант это не использовать делегатов в сериализуемых моделях, но обычно это приводит к тому, что вместо стандартных делегатов начинается использование рукописных. может это и есть текущий тренд?
источник

MZ

Maxim Zinchenko in Kotlin Moscow
собственно к котлину тут непонятно какие претензии, потому видимо и issue этот висит. разные десериализаторы конструируют объекты так, как им вздумается, после чего transient поля оказываются неинициализированными. если бы речь была только про lazy, то можно было бы по-другому его компилировать и не делать отдельного инстанса для делегата, а держать только значение (или два). так можно было бы поддержать любой вариант десериализации. но когда речь о произвольном делегате, такое фиг сделаешь, придётся видимо делать кастомную десериализацию, а если не ставить @delegate:Transient, то и кастомную сериализацию. в общем, простых выходов не вижу
источник

AN

Alexander Nozik in Kotlin Moscow
Maxim Zinchenko
собственно к котлину тут непонятно какие претензии, потому видимо и issue этот висит. разные десериализаторы конструируют объекты так, как им вздумается, после чего transient поля оказываются неинициализированными. если бы речь была только про lazy, то можно было бы по-другому его компилировать и не делать отдельного инстанса для делегата, а держать только значение (или два). так можно было бы поддержать любой вариант десериализации. но когда речь о произвольном делегате, такое фиг сделаешь, придётся видимо делать кастомную десериализацию, а если не ставить @delegate:Transient, то и кастомную сериализацию. в общем, простых выходов не вижу
Проблема с делегатами в том, что вы, даже если и захотите их десериализировать, не сможете. Вам нужно место для инжектирования значения, а в делегате его вообще может не быть. В общем случае это не решается. Делайте DTO объекты
источник

MZ

Maxim Zinchenko in Kotlin Moscow
речь конечно только о транзиентах. для них специально добавили поддержку @delegate:Transient. но она ничего не даёт для десериализации. то есть, проблемы с сериализацией они пофиксили. чукча не читатель, чукча писатель. на самом деле, если бы все либы использовали публичные конструкторы (некоторые умеют), проблемы бы не было. но к сожалению большинство библиотек не использует конструкторы
источник

MZ

Maxim Zinchenko in Kotlin Moscow
всмысле не просто использовать конструктор, а использовать его так, как это задумано в data class c val полями - задавать все значения через конструктор. не использовать никаких unsafe и доступа к полям
источник

MZ

Maxim Zinchenko in Kotlin Moscow
тут конечно в основном проблема с этими либами. но они тоже не просто так это делают
источник

AN

Alexander Nozik in Kotlin Moscow
Maxim Zinchenko
тут конечно в основном проблема с этими либами. но они тоже не просто так это делают
Сейчас для kx-serialization делают более человеческий апи для кастомных сериализаторов. Но work in progress. А во что сериализовать? в Json?
источник

MZ

Maxim Zinchenko in Kotlin Moscow
с сериализацией пусть и не очень красиво, но в целом жить и так можно. в основном json конечно
источник

AN

Alexander Nozik in Kotlin Moscow
Maxim Zinchenko
с сериализацией пусть и не очень красиво, но в целом жить и так можно. в основном json конечно
Вот это посмотрите: https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/json_transformations.md. Там можно ручной трансформер вставлять
источник

D

Dee in Kotlin Moscow
Ребят, всем привет! Снова возник вопрос.

Есть список айдишников, мне нужно отфильтровать этот список по поиску в мапе.

someListOfIds().filter {
 someMap[it] != null
}.map {
 someMap[it]!!.someValue
}

Не хочу вызывать !! после filter, не могу найти что-то готовое, что я делаю не так?
источник

AN

Alexander Nozik in Kotlin Moscow
Dee
Ребят, всем привет! Снова возник вопрос.

Есть список айдишников, мне нужно отфильтровать этот список по поиску в мапе.

someListOfIds().filter {
 someMap[it] != null
}.map {
 someMap[it]!!.someValue
}

Не хочу вызывать !! после filter, не могу найти что-то готовое, что я делаю не так?
someListOfIds().mapNotNull{someMap[it]?.someValue}
источник

D

Dee in Kotlin Moscow
не так выразился, получается.
источник

D

Dee in Kotlin Moscow
someListOfIds().filter {
 someMap[it] != null
}.map {
 someMap[it]!!.someValue + it
}
источник

D

Dee in Kotlin Moscow
it -> будет тем айдишником в someListOfIds
источник

D

Dee in Kotlin Moscow
Alexander Nozik
someListOfIds().mapNotNull{someMap[it]?.someValue}
а то при этой конструкции
источник

D

Dee in Kotlin Moscow
у мнея ток someValue list
источник