@kotlin_lang

Страница 296 из 982
Pavel
29.08.2017
17:49:49
А кто-нибудь юзал javalin? У меня корутины не стартуют совместно с ним, грешу на то что javalin перехватывает весь контроль

? animufag ?
29.08.2017
18:38:17
крч доки анко говорят: ставь андроид студио 2.4+

ставишь 3.0, она её не поддерживает и просто нигде не отображается

Pavel
29.08.2017
19:21:33
Какие DI вы юзаете на Котлине?

Google
Mi
29.08.2017
19:25:23
spring)))

Михаил
29.08.2017
19:49:15
Какие DI вы юзаете на Котлине?
для андроида интересует?

Pavel
29.08.2017
19:50:03
Интересно, а давайте нет. DI на котлине и не для Андройда.

Михаил
29.08.2017
19:50:56
тогда скорее всего в большинстве случаев это будет spring di или guice)))

Pavel
29.08.2017
19:51:35
Ок :) А если для Андройда?)

Quantum Harmonizer
29.08.2017
19:51:58
Ок :) А если для Андройда?)
Dagger 2 стал классикой.

Михаил
29.08.2017
19:52:20
Dagger 2, щас понравился очень Toothpick (удобнее дагера)

Pavel
29.08.2017
19:53:13
Dagger 2 стал классикой.
К сожалению, да. Претензия к даггеру2, когда он ломается, нужна команда экстрасенсов, чтобы его оживить.

jacoder
29.08.2017
19:53:40
А если еще котлин + датабиндинг...

Pavel
29.08.2017
19:53:42
Слышал про toothpick и kodein. Давайте поподробнее, почему туспик а не даггер2?

Quantum Harmonizer
29.08.2017
19:53:50
Да, собственно, любой автоматический DI вносит неочевидность, а кода меньше не делает.

Михаил
29.08.2017
19:54:07
Dmitry
29.08.2017
19:54:13
https://github.com/SalomonBrys/Kodein есть еще такое (сам пока не использовал)

Google
Anton
29.08.2017
19:54:48
слышал про три альтернативы причем говорили что они намного легче даггера: кодеин туспик и еще какой то. один из них на патчинге байткода, другой вообще на рефлекшене тоесть у тебя может упасть в рантайме. а третий я забыл.

jacoder
29.08.2017
19:55:00
И прикрутить Room alpha с annotqtionProcessor. Отличный вечер обеспечен :)

Pavel
29.08.2017
19:55:20
Про Кодеин поподробнее нам может рассказать @tuule

Va
29.08.2017
19:57:05
могу, да. вещь потрясная, но только не для смежных с джавой проектов, потому что в джаве он выглядит ужасно

Anton
29.08.2017
19:57:11
нене какой то другой

Va
29.08.2017
19:57:56
если проект только котлин — очень советую попробовать кодеин

очень удобные scope

и система описания биндингов

Михаил
29.08.2017
19:59:06
Слышал про toothpick и kodein. Давайте поподробнее, почему туспик а не даггер2?
toothpick +: -не надо никакой менеджер скоупами писать он втроенный и очень удобный. -также как и дагер поддерживает jsr-330 -компоненты как дагере там в принципе не надо описывать, немного другая концепция -валидация графа в рантайме, всегда упадет с адекватной ошибкой или почти всегда) -: -нельзя ограничить доступ к зависимостям родительского скоупа (может ошибаюсь или делаю что-то не так) -валидация графа в рантайме, но не думаю что можно не заметить при ручном тестировании краш)

Anton
29.08.2017
19:59:40
почему плюсами считается то что уже есть в даггере)

это же не плюс )

если рассматривать как альтернативу даггеру

Михаил
29.08.2017
20:00:44
ну вот кодеин не поддерживает jsr 330 если не ошибаюсь. можно отнести относительно него плюс)

Anton
29.08.2017
20:01:07
вот я лично считаю что валидация графа в рантайме это просто супер огромный минус по сравнению с даггером

остальные плюсы просто меркнут

тоесть без тестов вообще опасно будет

Anton
29.08.2017
20:01:37
ну потому что фейлфаст типа

это же хорошо когда у тебя все всплывает при билде

Google
Михаил
29.08.2017
20:02:18
но как всплывает. как г в проруби :D

Anton
29.08.2017
20:02:31
почему) вроде норм логи пишутся

Михаил
29.08.2017
20:04:03
да. но все же время уходит на то чтобы их разобрать и найти ошибку, а если учитывать что нынче капт не хочет проекты повторно собирать без clean build, то ужас. а тузпик сразу напишет тебе какую зависимость и где не может удовлетворить

Михаил
29.08.2017
20:10:03
ну когда пытаешь заинжектить то что не может заинжектить

Михаил
29.08.2017
20:12:44
Просто у меня сейчас к экрану, который нужно протестить, не так просто добраться (надо время потратить, чтобы посерфить приложение). И если я, дойдя до этого экрана, вдруг увижу падение из-за ошибки в графе, то мне придется ее фиксить и потом заново серфить к экрану... Такой себе выигрыш во времени

Михаил
29.08.2017
20:16:46
ну я с даггером очень редко косячу (а если и косячу, то сразу вижу ошибку), так что хз

Михаил
29.08.2017
20:17:16
ну вот. с тузпиком еще сложнее накосяить, ибо он проще

Anton
29.08.2017
20:29:56
ну для меня все равно логи не перевешивают этот минус)

Va
29.08.2017
20:53:26
хоть убейте, это плюс ) да и сложно накосячить на верхних уровнях графа. а если накосячить на нижних — это всплывет сразу )

Anton
29.08.2017
20:53:47
я не юзал но теоретически это может оказаться где то глубоко

и без тестов не поймается

а потом приложение упадет)

Va
29.08.2017
20:55:05
ну окей, в любом случае, что есть тесты для такой штуки, попробовать взять все зависимости ? это пару строк кода )

Anton
29.08.2017
20:55:50
тоже верно)

Va
29.08.2017
20:59:10
у меня в основном проекте сейчас вообще солянка библиотечная. там анко, мокси, кондуктор и кодеин)

Google
Va
29.08.2017
20:59:36
и все отлично тестится )

Назаров
30.08.2017
05:17:54
Всем привет. Есть ли возможность написать геттер, чтобы после получения ссылка сама обнулялась? первое что пришло в голову, но это булщит var tasks: List<Task>? = null get() { return tasks tasks = null }

Sergey
30.08.2017
05:37:30
lazy только наоборот?)

Vladimir
30.08.2017
05:42:04
Не самое очевидное поведение. Может, лучше не делать такие побочные эффекты в свойстве, а назвать соответствующий метод takeTasks()?

Mi
30.08.2017
05:49:04
tasks?.let { tasks = null; it }
Всегда ведь null будет

Sergey
30.08.2017
06:02:16
tasks?.also { tasks = null }

Ozz
30.08.2017
06:04:40
А какая разница между also & let

Только в аргументах и контексте?

Badya
30.08.2017
06:12:25
Не лучше ли написать Once<E> который будет иметь флажок visited? Как Option по сути

Quantum Harmonizer
30.08.2017
06:50:47
Mi
30.08.2017
06:51:40
хотя нет, затупил

Dibro
30.08.2017
07:03:06
А какая разница между also & let
foo.also { "bar" } вернет foo, а foo.let { "bar" } вернет "bar"

Va
30.08.2017
07:17:27
точно так же и apply и run, только вместо себя аргументом в лямбде, он передаст себя как ресивер

(то есть будет this в скоупе лямбды)

Ozz
30.08.2017
09:10:00
Спасибо за помощь ?

Maxim
30.08.2017
09:55:12
lateinit var offerId: Long - 'lateinit' modifier is not allowed on primitive type properties var offerId: Long - Property must be initialized or be abstract От же ж, и так не так, и так не этак

Михаил
30.08.2017
09:56:30
видимо надо ставить var offerId = 0L

Tipok
30.08.2017
10:00:18
ReactNative + Kotlin кто-нибудь пробовал? Вообще это заработает?

Google
Igor
30.08.2017
10:12:17
ReactNative + Kotlin кто-нибудь пробовал? Вообще это заработает?
Был тут один, руками весь интероп с RN делал и еще боролся с огромным Kotlin-JS-Runtime.

Алексей
30.08.2017
10:14:23
Ребят, а в котлине можно такое выражение if (this.sessionId == 0L) { this.sessionId = time } cократить? Т.е как с нуллом ?: например

Алексей
30.08.2017
10:17:28
ну, ок)

Михаил
30.08.2017
10:21:19
Ну такое се. Имхо исходный вариант больше суть отражает

Алексей
30.08.2017
10:21:27
можно, но так не особо красивее)

Михаил
30.08.2017
10:22:00
Правда тут бы 0 на константу по хорошему заменить

Алексей
30.08.2017
10:22:31
ZERO_LONG ?)

Михаил
30.08.2017
10:23:17
Ну она же что то значит) NOT_ASSIGNED_SESSION_ID

Как вариант

Не знаю что именно этот 0 значит)

Алексей
30.08.2017
10:23:59
ну просто полностью код выглядит так init { val time = System.currentTimeMillis() if (sessionId == 0L) { sessionId = time } if (registerDate == 0L) { registerDate = time } if (lastForegroundTime == 0L) { lastForegroundTime = time } }

если под каждый 0 константу заводить - как-то не тру)

Михаил
30.08.2017
10:24:25
А

Алексей
30.08.2017
10:24:43
вот кстати интересный вопрос, в дата классах вообзще нормально так писать?

т.е у меня изначально в яве был билдер

я его заменил на это data class User( val id: Long, val name: String?, var previousName: String? = null, var registerDate: Long = 0L, var sessionId: Long = 0L, var lastForegroundTime: Long = 0L, var lastBackgroundTime: Long = 0L, var properties: UserProperties = UserProperties() ) { init { val time = System.currentTimeMillis() if (sessionId == 0L) { sessionId = time } if (registerDate == 0L) { registerDate = time } if (lastForegroundTime == 0L) { lastForegroundTime = time } } }

но суть в том что мне надо эти 3 значения заполнять всегда

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