@kotlin_lang

Страница 313 из 982
Mi
08.09.2017
17:46:46
разве в джаву нужно отправлять мутабл?

и из джавы не приходит в мутабл, там как сам решишь

Lev
08.09.2017
17:47:42
... мне нужен агрегат с двумя Map внутри. При этом объекты в разных Map ссылаются друг на друга. Я так думал хранить граф

очевидное правило - внутри иммутейбла хранить только иммутейбл. То есть у нас есть иммутейбл агрегат, с иммутейбл списоком из иммутейбл элементов. По идеологии доступ к списку строго через методы агрегата. То есть получить/записать список можно только через геттер сеттер. Т.к. список иммутейбл, то можно спокойно отдавать ссылку на внутренний, все равно ничего не сделать. Что копируй что не копируй.

Google
? animufag ?
08.09.2017
17:48:35
я тебе привёл пример одного уровня вложенности, если их будет 3 то team.copy(lead = team.lead.copy(age = team.lead.age + 1))) ну дурацкие примеры

Lev
08.09.2017
17:49:12
а пофиг =)

все внутри - иммутейбл

можно спокойно копировать по ссылкам как я понимаю

а вот как обновить элемент внутри Map/List?

? animufag ?
08.09.2017
17:51:03
разве в джаву нужно отправлять мутабл?
ну различные сдк с которыми ты работаешь и которые изменяют поля твоих объектов) пример не смогу привести на самом деле ну например bindViewHolder подразумевает что вьюхи мутабельны

Lev
08.09.2017
17:51:11
(я на самом деле считаю что вся эта затея с immutable - модная фигня. Скоко работал с изменениями по ссылкам, грязными функциями и прочим - проблем не было. И читал такой же код, вплоть до натурально индусского. Ничо, все понятно было.)

Mi
08.09.2017
17:51:20
нахер такую иммутабельность тогда, это маразм

просто меру знать надо

ты главное сам ничего не сможешь сделать

Igor
08.09.2017
17:52:25
просто меру знать надо
(а кому не хватает - идут в скалу ?)

Lev
08.09.2017
17:52:27
И все же сама идея занятна. С этим действиетльно будет очень просто потом работать.

Google
Mi
08.09.2017
17:52:32
это нужно для того, чтобы защитить программиста от говна, а не библиотеки

Lev
08.09.2017
17:52:43
просто меру знать надо
ну так оно или иммутабельно или нет =)

? animufag ?
08.09.2017
17:53:12
ну да это мода. и да ты ограничиваешь своих колег. мб если бы я с конкаренси работал то мог что-нибудь сказать ещё

Lev
08.09.2017
17:53:13
... это нужно чтобы прогер который код читать не может почитал его...

Mi
08.09.2017
17:53:18
напиши экстеншонов для иммутабельных списков)))

Lev
08.09.2017
17:53:28
Короче )

? animufag ?
08.09.2017
17:53:42
(а кому не хватает - идут в скалу ?)
и что там всё во всю глубину иммутабельно?

Lev
08.09.2017
17:53:58
Да?

Короче, иммутабельный объект с иммутабельным списком иммутабельных объектов - он получается весь де факто иммутабельный, на какие бы его части я не ссылался? Так? =)

Mi
08.09.2017
17:55:42
а нахрена тебе такая иммутабельность?

ты прикинь какая это нагрузка на gc

мало-мальски объёмная операция превращается в ад

Igor
08.09.2017
17:56:17
и что там всё во всю глубину иммутабельно?
Не хочу офтопить, лучше обсудить в их чате. В основном все как в Котлин, но у них свои персистетные коллекции (и это вызывает большие проблемы в интеропе)

Mi
08.09.2017
17:56:55
скала это тот ещё гемор

Lev
08.09.2017
17:57:20
а нахрена тебе такая иммутабельность?
Ну чтоб... все "правильно" было =) Чтобы нельзя было агрегат привести в несогласованное состояние.

? animufag ?
08.09.2017
17:57:38
Короче, иммутабельный объект с иммутабельным списком иммутабельных объектов - он получается весь де факто иммутабельный, на какие бы его части я не ссылался? Так? =)
хз. звучит как подготовка к собеседованию просто есть языки где всё иммутабельно, есть языки где имитируют иммутабельность везде это всё работает до какого-нибудь уровня. в лучшем случае до байткода, обычно остаются разные бекдоры, рефлекшен там

Lev
08.09.2017
17:58:51
ну понятно что если вообще извернуться то можно сделать это дело мутабельным. Это все же по больше чайсти защита от ненарочного неверного использования. А не от специального "взлома"

Mi
08.09.2017
17:59:22
эта защита не должна быть в ущерб пониманию и использованию

Google
Lev
08.09.2017
18:00:14
вероятно в моем случае не будет особой проблемы в использовании

? animufag ?
08.09.2017
18:01:24
ну понятно что если вообще извернуться то можно сделать это дело мутабельным. Это все же по больше чайсти защита от ненарочного неверного использования. А не от специального "взлома"
ну плюс это доп информация для компилятора. на уровне LLVM IR все (точно не знаю) значения на стеке иммутабельны. мб попроще работать с иммутабельным языком

Mi
08.09.2017
18:01:28
ну да, много вложенных copy это же не проблема...

переходите в хаскель

Lev
08.09.2017
18:14:29
https://github.com/fablue/imko еще один с ума сходит

Балин

Lev
08.09.2017
18:19:33
Хранить то мне это дело как.. конструктор же нужен

Через констурктор можно черти что повтыкать

? animufag ?
08.09.2017
18:21:27
хз о чём ты

Lev
08.09.2017
18:36:18
хз о чём ты
Идея в том, что раз уж стал (вообще то тут меня к этому принудили val, nonnull) использовать immutable, то и агрегаты тоже должны быть как положено по ddd - immutable. Простой объект можно просто сделать immutable: data class + val + все в конструкторе. А вот как сделать составной объект immutable. Пока что идея такая же - все внутренности корневого immutable тоже должны быть imm (замучался писать), указаны через val. Но вот агрегат должен быть в любой момент времени согласованным. А значит если там два списка залинкованных друг на друга - нельзя просто так взять и создать его через конструктор. Сам orm я думаю это сделает через рефлексию, фиг с ним. Но надо как то сам конструктор защитить. Чтобы в клиентском коде было сравнительно невозможно привести его в несогласованное состояние. Наверно просто навесить модификатор доступа на этот констурктор.

? animufag ?
08.09.2017
18:43:51
ну циклические ссылки в иммутабл сложновато но реально

мб пример кода где они нужны?

Руслан
08.09.2017
19:10:34
ну как-как, через мэни-то-мэни обджект

Lev
08.09.2017
19:16:48
мб пример кода где они нужны?
Окей, вот моя реальная задача. Объект бизнес-процесса (большой прямоугольник) содержит лейны (lanes, средний прямоугольник, к лейну крепится исполнитель задачи), лейны содержат активити (маленький прямоугольник, задача). Мало того (это можно опустить пока), есть ещё список переходов. У активити есть список переходов в другие активити) Только не отсылайте меня к фреймворку activity. Все бы хорошо, но часто требуется получить все лейны какого-то активити и наоборот. Я очень не хочу это делать через циклы. Хотя, признаться, эту структуру в NoSql я делаю первый раз, может я что то упускаю.

Получается объект процесса, в нем две мапы - лейны и активити. У них есть внутренние уникальные имена (считай Id)

Элементы мап друг на друга смотрят. Можно без ссылок, просто по идшники

В идеале это все сразу и в бд сохранять

Я не хочу чтобы этот агрегат мог прийти в несогласованное состояние. Если сделать ссылки - то при изменении последнего активити по цепочке копировать придется вообще все. Не весело. Ну и не особо в бд сохранится. Можно тогда просто ид хранить а ссылаемый объект.

Можно ещё проще - хранить рядом ещё мапы со связью ид-ид

Google
Глеб
08.09.2017
19:24:19
Уверен, что я где-то читал про православный подход к решению конкретно данной задачи

при чем типовому решению, даже название было

Глеб
08.09.2017
19:25:33
Сейчас попробую загуглить :)

? animufag ?
08.09.2017
19:26:42
data class Child(val parent: Parent) class Parent ( createChild: (Parent) -> Child ) { val child = createChild(this) } это как решить проблему с одной циклической зависимостью) ну и датакласс здесь ок не выйдет при множестве: да нужны внешние мапы скорей всего

Глеб
08.09.2017
19:29:16
Я сформулировал вопрос у себя в голове и вышел с этим вопросом в интернет. Результат меня, впрочем, не удивил - все найденные варианты many-to-many в nosql сделаны через вспомогательные "таблицы"

Combot
08.09.2017
19:30:25
combot.org/chat/-1001032833563

? animufag ?
08.09.2017
19:31:35
?

Lev
08.09.2017
19:32:00
Я просто так нажал

Anton
08.09.2017
19:32:07
силен!!!

Lev
08.09.2017
19:32:29
... ???

Да я ради интереса нажал.... Что такого?

Я кажется тупанул... Для data класса не обязательно вообще все помещать в конструктор.

Завтра попробую

Anton
08.09.2017
20:19:16
парни, дайте ссылку на котлин оффтоп чат, пожалуйста

Vitalii
08.09.2017
20:34:49
Так это и есть он.

Anton
08.09.2017
22:27:01
А ну ок. Кто нибудь писал на clojure?

? animufag ?
08.09.2017
22:29:08
А ну ок. Кто нибудь писал на clojure?
не писал но хочу посмотреть следующий вопрос

Anton
08.09.2017
22:30:14
Ну я просто пофлеймть хотел, у живых людей впечатления узнать так сказать

Google
Igor
08.09.2017
22:45:28
Логично спрашивать в @clojure_ru или если пофлудить, то в @jvmchat (там точно оценят и выскажут непредвзятое мнение ?). Imho хороший язык для ФП, без лишней ленивости и io-монадок, жаль только динамический (еще и в ReactNative могет). Советую посмотреть на youtube доклады Николая Рыжикова - отлично рассказывает.

Igor
08.09.2017
22:50:08
Если память не изменяет - тут не так давно jOOQ обсуждали. Хотел спросить, где собственно его подтягивать для котлина?

Vitalii
09.09.2017
00:09:17
Ну я просто пофлеймть хотел, у живых людей впечатления узнать так сказать
Писал. После нее эти ваши джава стримы и реактивщина выглядит жалкими костылями. Язык клёвый, функциональщина лично мне зашла, так что если хочется чего-то нового, то сложуру есть смысл потыкать.

Руслан
09.09.2017
03:30:10
Igor
09.09.2017
08:40:13
Он генерит пока джава классы, так что не нужна особая версия jooq
Классно, сейчас тыркаюсь с ним. Такой вопрос - а как там нормально сделать prepared insert (если можно)?

Руслан
09.09.2017
08:46:33
Static statements vs. Prepared Statements https://www.jooq.org/doc/3.9/manual/sql-execution/statement-type/

Вот это думаю поможет

Т.е. по умолчанию все prepared

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