@kotlin_lang

Страница 845 из 982
Sergey
03.09.2018
06:33:22
this

OlegKrikun
03.09.2018
06:36:02
все по умолчанию, да и так она использует половину из 16 гиг
Добавь, сделай 2г, через vm.options (или как там он называется)

Sergey
03.09.2018
06:36:53
спасибо, дома попробую, сейчас я за полноценным ПК

Dmitry
03.09.2018
07:53:38
Восьмое поколение годное вышло. Мне ай5 хватает, 4 кор 8 тред и пиковое тдп 35вт
Я цитировал дискуссию про мак бук эйр. Я очень сомневаюсь, что мы можем говорить там про 35ватт. Ультратонкие компьютеры всегда будут ультрадохлыми, совершенно не важно какой там маркетинговый ай нарисован.

Google
Andrew
03.09.2018
07:54:46
Товарищи, @pofftop, если можно.

Maxim
03.09.2018
07:55:13
Интересная, кстати, штука. На разных машинах с разным количеством ОЗУ есть оптимальный объем, который надо выделять с помощью org.gradle.jvmargs. Слишком много замедляет сборку проекта, слишком мало тоже. Надо поэкперементировать по этому поводу.

Konstantine
03.09.2018
08:00:26
Evgeny
03.09.2018
08:02:04
Konstantine
03.09.2018
08:02:50
а разве аргумент “что с контрактами удобнее“ не самодостаточен?
Я прошу реальный пример, где с ними удобнее. Из практики прям, что вот с контрактом как хорошо, а без него нет.

Evgeny
03.09.2018
08:03:39
Я прошу реальный пример, где с ними удобнее. Из практики прям, что вот с контрактом как хорошо, а без него нет.
fun test(x: List<Int>?) { // If the function returns false, the value is definitely not null: if (!x.isNullOrEmpty()) { println(x.size) // Yay, smart cast to not-null! } } fun test(x: Any?) { // If the function returns (does not throw), then the argument is true: require(x is String) println(x.length) // Smart cast here too! }

Evgeny
03.09.2018
08:03:50
раньше эти примеры не работали

Konstantine
03.09.2018
08:05:19
раньше эти примеры не работали
Чой то? С каких пор, например, первая функция не сработает?)

Evgeny
03.09.2018
08:07:44
Чой то? С каких пор, например, первая функция не сработает?)
в первой функции смарткаст без контрактов не работает

Konstantine
03.09.2018
08:09:26
Igor
03.09.2018
08:19:05
Кстати, что-то же подобное (я про контракты) через анотации же делают? Где то я такое, видел в коде андроид ли что ли.

Google
Ivan
03.09.2018
08:45:04
а насколько обратно-совместимо снять inline модификатор с функции?

OlegKrikun
03.09.2018
08:56:46
а насколько обратно-совместимо снять inline модификатор с функции?
если refind/crossinline не используется, то вроде полностью

dimiii
03.09.2018
09:55:43
Опечатка: reified. А то я испугался, полез проверять, что за очередное ключевое слово притащили.

OlegKrikun
03.09.2018
10:03:02
Сорян, это всё жара

Konstantin
03.09.2018
11:08:25
натолкните на мысль как элегантно сделать апдейт дата класса другим экземпляром?

по компонентам в цикле пройтись?

Konstantin
03.09.2018
11:15:17
https://gist.github.com/josdejong/fbb43ae33fcdd922040dac4ffc31aeaf

что насчет такого?

Quantum Harmonizer
03.09.2018
11:16:39
ой, а что, можно было говнокодить?

Konstantin
03.09.2018
11:16:58
в чем говнокод

решение кстати не мое, нашел на обочине

Quantum Harmonizer
03.09.2018
11:18:14
в чем говнокод
рефлексия

jied
03.09.2018
11:22:52
у дата класса же есть copy

Nikita
03.09.2018
11:23:11
рефлексия
а дтошки одного класса?

Quantum Harmonizer
03.09.2018
11:23:33
Nikita
03.09.2018
11:23:34
два экземпляра одного класса?

Google
Nikita
03.09.2018
11:23:40
дак тогда да copy

самый простой вариант

и правильный по сути)

Igor
03.09.2018
11:24:28
https://arrow-kt.io/docs/optics/lens/ ? kkk
Покажешь пример ?

dimiii
03.09.2018
11:25:46
Покажешь пример ?
Что-то я сомневаюсь, что у меня получится - запостил в шутку, но потом заморочился и по-ходу шизо-код получается.

Nikita
03.09.2018
11:27:56
если ему целиком экземпляр подменить

другая проблема если есть идентификатор и его менять нельзя тогда надо надо апдейтер писать

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

или делегат апдейтеры

Konstantin
03.09.2018
11:30:47
мне надо сделать ровно то что в комменте в гисте - мерж между двумя экземплярами одного дата класса чтобы нулы не брались

Andrey
03.09.2018
11:31:14
натолкните на мысль как элегантно сделать апдейт дата класса другим экземпляром?
Не совсем понял, что значит: "сделать апдейт другим экземпляром"? Если у вас случай, когда в дата классе вложенная структура из ещё вложенных дата классов, и в одном из них надо одно поле проапдейтить, то вам нужны линзы (ссылку выше давали). Если что-то ещё, то надо понять, что.

Andrey
03.09.2018
11:33:09
мне надо сделать ровно то что в комменте в гисте - мерж между двумя экземплярами одного дата класса чтобы нулы не брались
А, если мёрдж двух экземпляров одного дата класса, притом в общем виде (чтоб для любых дата классов подходил), то только через рефлексию. Но тут ещё надо понять, что делать, если в исходных экземплярах два разных значения одного поля (стратегия мёрджа).

Ilya
03.09.2018
11:33:53
Помогите с такой задачей: Есть HashMap<Int, List<Obj», мне надо сделать новый HashMap, при этом надо удалить из исходной мапы из всех листов элементы с некотороым условием. Как это сделать?

пытался так it.filter { it.value.any { it.eventType != "holiday" } } as HashMap<Int, List<EventItem» но не получилось

Igor
03.09.2018
11:35:39
https://arrow-kt.io/docs/optics/lens/ ? kkk
Скopее тoгда уж вот сюда лучше: https://arrow-kt.io/docs/generic/product/. Опишите полугpуппу для обновления ваших дата-классов и сделайте банальный reducer.

Andrey
03.09.2018
11:36:56
со стратегией все просто - новое значение переписывает старое (если не нул)
Ок. То есть задача такая: есть oldObj и newObj. Требуется получить mergeObj, у которого каждое поле заполняется по правилу: если в newObj поле null, берём значение из oldObj, иначе берём значение из newObj. Верно я понял?

Google
dimiii
03.09.2018
11:39:25
Скopее тoгда уж вот сюда лучше: https://arrow-kt.io/docs/generic/product/. Опишите полугpуппу для обновления ваших дата-классов и сделайте банальный reducer.
?? Но кстати, когда начинается: "Опишите полугpуппу для обновления ваших дата-классов и сделайте банальный reducer.", становится грустно и старый добрый whatever.copy(field = some.thing....) уже кажется не такой скучный.

Igor
03.09.2018
11:39:54
?? Но кстати, когда начинается: "Опишите полугpуппу для обновления ваших дата-классов и сделайте банальный reducer.", становится грустно и старый добрый whatever.copy(field = some.thing....) уже кажется не такой скучный.
data class Entity(val id: Int, val balance: Long) { companion object { fun semigroup(): Semigroup<Entity> = object: Semigroup<Entity> { override fun Entity.combine(b: Entity): Entity { if (this.id == b.id) { return this.copy(balance = balance + b.balance) } return this } } } } fun example() { val a = Entity(1, 100) val b = Entity(1, 200) val c = Entity(2, 300) val result = with (Entity.semigroup()) { a + b + c } assert(result.id == 1 && result.balance == 300L) }

Admin
ERROR: S client not available

Andrey
03.09.2018
11:41:51
да
Это надо решать общим методом для произвольных data классов?

Konstantin
03.09.2018
11:42:42
Это надо решать общим методом для произвольных data классов?
ну, хорошо бы реюзабельность конечно. иначе я уже писал - можно тупо ручками все сделать (если для одного класса), правда все же при изменении конструктора придется и там менять

Igor
03.09.2018
11:43:31
Чуть-чуть подпpавил код для удобства, добавил пpимеp. ИМХО, весьма пpиятно.

Andrey
03.09.2018
11:47:00
линалом же :)
Ну если уж совсем точно, то общей алгеброй. Полугруммы к линейности мало отношения имеют

Andrey
03.09.2018
11:52:00
ну, хорошо бы реюзабельность конечно. иначе я уже писал - можно тупо ручками все сделать (если для одного класса), правда все же при изменении конструктора придется и там менять
Если с реюзабельностью, то без чёрной магии (рефлексия с хаком доступности и модифицируемости полей) сложновато будет. 1. Вам нужен будет способ создавать объекты произвольного класса (в jvm через unsafe) 2. Вам нужен будет способ задавать значения, в том числе для private val полей (рефлексия с хаком доступности и модифицируемости полей).

Konstantin
03.09.2018
11:52:47
принято, спасибо

Max
03.09.2018
12:02:07
Всем привет. Возможно ли, получить subList из ArrayList, при этом конвертировать полученный список к типу ArrayList (из MutableList)?

Max
03.09.2018
12:05:39
То что нужно. Спасибо!

Andrey
03.09.2018
12:58:08
принято, спасибо
Примерно вот так для случая, когда у дата класса 1 конструктор, в котором просто инициализируются все поля, нет параметров, кроме полей, и не переопределены/доопределены componentN методы: import kotlin.reflect.KFunction import kotlin.reflect.KParameter import kotlin.reflect.full.functions fun main(args: Array<String>) { val foo = Foo(null, null) println(foo) val foo1 = foo updateWith Foo("foo", null) println(foo1) val foo2 = foo1 updateWith Foo("baz", "bar") println(foo2) } data class Foo(val foo: String?, val bar: String?) private const val componentPrefix = "component" private const val componentPrefixLength = componentPrefix.length infix fun <A : Any> A.updateWith(oldObj: A): A { val aClass = this::class assert(aClass.isData) { "Receiver should be instance of data class" } assert(aClass == oldObj::class) { "Receiver and old object should be instances of the same class" } val constructors = aClass.constructors assert(constructors.size == 1) { "Receiver's class should have one constructor only" } val constructor: KFunction<A> = constructors.first() val parameters = constructor.parameters val componentFunctionsByIdx = aClass.functions .filter { it.name.matches(("^$componentPrefix[0-9]*$").toRegex()) } .map { it.name.substring(componentPrefixLength).toInt() to it } .toMap() assert(parameters.size == componentFunctionsByIdx.size) { "All constructor parameters should be bound to data class components" } val params: Map<KParameter, Any?> = (0 until parameters.size) .map { val componentGetter = componentFunctionsByIdx[it + 1]!! parameters[it] to (componentGetter.call(this) ?: componentGetter.call(oldObj)) } .toMap() return constructor.callBy(params) }

Google
Konstantin
03.09.2018
13:01:35
вот это да, спасибо, проверю на досуге )

Alexey
03.09.2018
13:03:05
ухххх, надеюсь это не будет пользоваться часто

Nikita
03.09.2018
13:04:10
aClass.functions - а это типа не через рефлекшен?

Alexey
03.09.2018
13:04:30
Конечно через рефлексию

Nikita
03.09.2018
13:05:08
дак надо было тогда мапу статик аймютабл делать

иначе боль

Alexey
03.09.2018
13:05:46
Я всё офигиваю, в чем проблема такой апдейтер написать руками?

Как будто для 1000 типов эта функция нужна

Если да, то лучше посмотерть в сторону кодогенерации

Andrey
03.09.2018
13:06:29
ухххх, надеюсь это не будет пользоваться часто
Ну лично я не советовал бы такое особо часто пользовать по двум причинам: 1. Куча ограничений на дата класс, проверяемых в рантайм 2. Рефлексия работает не быстро.

дак надо было тогда мапу статик аймютабл делать
Какую мапу там можно статик сделать?

Alexey
03.09.2018
13:07:43
Ну вообще обычно во всяких рефлекшен утилс делается static ConcurentHashMap

Andrey
03.09.2018
13:08:41
Ну вообще обычно во всяких рефлекшен утилс делается static ConcurentHashMap
В смысле закэшировать componentFunctionsByIdx для разных классов? Вы про это?

Alexey
03.09.2018
13:09:17
Ну в данном случае да, и конструктор еще

Andrey
03.09.2018
13:09:59
Ну в данном случае да, и конструктор еще
Ну это уже оптимизации по скорости. Я просто идею накидал, как это можно на рефлексии сделать.

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