
Maxim
08.09.2017
10:08:52
Велика сила комьюнити!

Igor
08.09.2017
10:11:53
Можно еще посмотреть последние доклады от ДмитрияЖ про “кишочки” котлина - там тоже много интерестного

Антон
08.09.2017
10:14:34

Igor
08.09.2017
10:15:08
https://youtu.be/yYG12qaxWO4

Google

Антон
08.09.2017
10:16:44
Спасибо

Mi
08.09.2017
10:24:40

Lev
08.09.2017
10:33:22
Я правильно понимаю что kotlin подталкивает чтобы не было nullable свойств?
аааа.... а как сделать setter который this возвращает????? ОмагадОмагадОмагадОмагадОмагадОмагадОмагад

Sergey
08.09.2017
10:42:38
а зачем?
with(user) {
name = 1
pass = 2
a = 3
}
вот тебе и fluent interface

Konstantin
08.09.2017
10:43:18
Я бы предположил, что для Builder pattern, но у нас есть named и default arguments

Lev
08.09.2017
10:47:45
И еще вопрос
Констуктор класса в котлине имеет в аргументе тип Double
Как мне это с явы то вызвать?

Sergey
08.09.2017
10:48:33
а в чем проблема? в джаве ж есть Double

Lev
08.09.2017
10:49:11
Ну вот че то.. не подходят типы

Google

Pavel
08.09.2017
10:49:54
Какой именно? примитив или обертка?

Lev
08.09.2017
10:50:45
Я ошибся сигнатурой просто
примитив явы "вошел" в Double котлина без проблем
Я правильно понимаю что kotlin подталкивает чтобы не было nullable свойств?

Михаил
08.09.2017
10:54:18
подталкивает не то слово) пинает*

Igor
08.09.2017
11:04:03

Lev
08.09.2017
11:13:52
тяжко будет... яву перевести на котлин. В половине мест - nullable
в том числе в тех же сущностях
тот же id дожлен быть nullable - т.к. при отправке в orm она должна понять создавать сущность или обновлять

Konstantin
08.09.2017
11:15:22

Руслан
08.09.2017
11:15:40
ставь lateinit или Int?
если у тебя реально поле бывает null и через магию ORM сетается

Lev
08.09.2017
11:16:03
ну... когда будут получать id каждый раз мучаться с проверкой "вдруг там null", хотя я сущность только что из бд прочитал

Konstantin
08.09.2017
11:16:56

Lev
08.09.2017
11:17:20
... выглядит как какойто костыль это !!

Руслан
08.09.2017
11:17:41
так и есть

Lev
08.09.2017
11:18:03
я не могу воткнуть lateinit. Потому что орм проверит (очевидно) что там в id. И получится что там null и, как я понимаю, будет бобо
"Тип такого свойства должен быть non-null и не должен быть примитивным.
Доступ к lateinit свойству до того, как оно проинициализировано, выбрасывает специальное исключение, которое чётко обозначает, что свойство не было определено."
А у меня это String
Еще и не должно быть в конструкторе
посмотрел инфу по spring-data-kotlin. Чуваки там val пишут в свойствах...

Google

Lev
08.09.2017
11:22:47
val id: Long = -1
лол

Руслан
08.09.2017
11:22:53
все просто
не переводи сущности jpa на котлин

Lev
08.09.2017
11:23:17
Ну как так то?

Руслан
08.09.2017
11:23:39
ну jpa и без котлина костыльная и убогая

Lev
08.09.2017
11:23:42
А не спасет... при работе с сущностями java в котлине - все равно мучаться с nullable

Руслан
08.09.2017
11:23:46
эти аннотации
возьми ORM где можно нормально работать
https://www.jooq.org/
http://cayenne.apache.org/

Lev
08.09.2017
11:26:08
Ну да, ща все перепилю, погоди

Руслан
08.09.2017
11:27:06
стоп, а зачем ты существующий код перепиливаешь?

Lev
08.09.2017
11:27:25
ну... не хочу яву хочу котлин

Руслан
08.09.2017
11:27:41
ну пиши на котлине, зачем легаси то трогать

Lev
08.09.2017
11:28:00
Ну.. это типа мое легаси
могу и трогать
плагин org.jetbrains.kotlin:kotlin-noarg - для того чтобы создавать пустой констурктор для всех @Entity

Руслан
08.09.2017
11:28:49
да, больше костылей, богу костылей

Lev
08.09.2017
11:29:14
=)
А зачем... делать val в свойствах?
Каждый раз придется копировать объект, нельзя будет изменять его по ссылке

Google

Руслан
08.09.2017
11:35:18
хорошо же

Lev
08.09.2017
11:35:30
хз.. чем?
взял пачку объектов, прогнал через какую либо фию.. она все поменяла что ей надо. Дальше работаешь.
А тут - она вернет новый массив, а он может быть был закреплен в другом объекте - перепривязывать
Я очевидно не догоняю, но вы бы объяснили в чем фишка immutability

Mi
08.09.2017
11:38:05
В консистентности данных

Руслан
08.09.2017
11:38:27
прям недавно было: https://blog.jetbrains.com/idea/2017/08/code-smells-mutation/

Konstantin
08.09.2017
11:38:28
А тут - она вернет новый массив, а он может быть был закреплен в другом объекте - перепривязывать
Ну, во-первых thread-safety. Нет никаких проблем с изменением состояния и всем вот этим вот. Просто новый объект, который всегда можно читать. Во-вторых, "А тут - она вернет новый массив, а он может быть был закреплен в другом объекте - перепривязывать" говорит о том, что это построено на сайд-эффектах. А сайд-эффекты довольно мутная тема чтобы строить на них сколко-нибудь серьезные вещи.

Igor
08.09.2017
11:39:11

Anton
08.09.2017
11:39:34
это кстати тоже описывается в эффектив джаве которую я рекомендовал посмотреть))
профит от имутабельности

John
08.09.2017
11:39:41
если посмотреть в сторону react и redux - можно очень быстро проверять - было ли по факту изменение данных, и соответсвенно - нужно ли запускать процесс обновления ui

Lev
08.09.2017
11:39:49
типа вдруг нечистая функция напорет непойми что в объекте по ссылке?
@metalgear ну вот это и есть большой минус. Это заставляет перерисовывать (как минимум пересчитывать) дофига чего. Было бы у них реактивное хранилище - проблем бы не было.

John
08.09.2017
11:41:42
@lllewik это как angular и его 2х сторонний биндинг?

Lev
08.09.2017
11:42:07
@metalgear а я не говорил про двусторонний =) Состояние надо менять только через action)
Так... я правильно понимаю, что иммутабельность заставляет использовать писать методы так, чтобы они возвращали таки данные и тот кто их вызывает четко понимал что вообще могло поменятсья?

Руслан
08.09.2017
11:43:51

Lev
08.09.2017
11:44:35
Я не говорил про чистоту. Ну в плане того что аргументы не поменяются - тут да, будет чистота.

John
08.09.2017
11:44:39
ну в самом простом случае у нас есть ссылка на предидущее состояние, и результат работы чистой функции-редусера, который вернет ту же самую ссылку, если объект не изменился, иначе возвращается новый объект, можно проверять наличие изменений простым оператором ==

Google

Руслан
08.09.2017
11:45:40

John
08.09.2017
11:47:10
ну я просто давал комментарий как еще может использоваться свойство иммутабельности, с которым познакомился именно во время работы с react + redux. зло это или добро - я не берусь судить

Lev
08.09.2017
11:47:22
@metalgear именно. Не совпало - перерисовывай (пересчитывай) нафиг все. А если у меня поменялось какое то свойство всего одно и оно отвечает за флажок какой - то при реактивном хранилище перерисуется (пересчитается) только флажок а не весь контейнер

John
08.09.2017
11:47:55
реакт разрулит такой кейс, при условии правильной организации компонентов

Lev
08.09.2017
11:48:11
во... сиди организовывай компоненты
вот мне и разонравится реакт и свалил на vue

John
08.09.2017
11:48:28
ну да, сиди организовывай)

Руслан
08.09.2017
11:49:07

Lev
08.09.2017
11:49:50
Так он проверяет только по тому что reducer вернул. Или я чего не понял? Глубже оно не идет

Igor
08.09.2017
11:49:51
Кстати не многие в курсе, но в котлин есть персист. коллекции
https://github.com/Kotlin/kotlinx.collections.immutable

Sergey
08.09.2017
11:50:16
ну как есть.. это инкубатор)

Igor
08.09.2017
11:50:31
Как и корутины ?

Lev
08.09.2017
11:51:01
Короче, вы считаете что вот прям все структуры стоит делать immutable по умолчанию и только если потребуется - изменяемые?

Руслан
08.09.2017
11:51:07

Mi
08.09.2017
11:51:07
Так по дефолту же коллекции иммутабельные в котлине

Руслан
08.09.2017
11:52:16

Lev
08.09.2017
11:53:07