
Bogdan
12.02.2018
18:22:11
ты про что-то в этом духе ?

Igor
12.02.2018
18:23:53
Ну да, только хотелось бы что inline - типа как макрос. В общем я понял, спасибо.

Andrey
12.02.2018
23:35:24
Он и так "типо как макрос", инлайнится же. Просто не везде и не все

Google

Bogdan
13.02.2018
01:19:16

Sergey
13.02.2018
09:54:41

Quantum Harmonizer
13.02.2018
09:55:36

Sergey
13.02.2018
09:56:11
аа. понял. спасибо

DarkMentat
13.02.2018
10:34:40
все еще ребят, простите что задалбываю, но я так и не догнал
есть в идее рулы линта
для котлина тоже
кто-то писал для них кастомные варнинги?
а именно варнинги про hardcoded string

Sergey
13.02.2018
10:36:36
@KirillTim нет ли какой информации о поддержке suspending констркуторов? не планируется в будущем?
https://github.com/Kotlin/kotlin-coroutines/issues/52
тут Роман писал что в ближайшем будущем не планируется. Не изменилось?

Stan
13.02.2018
10:43:05
Было бы неплохо

Google

Михаил
13.02.2018
10:47:44

Sergey
13.02.2018
10:48:52
если нужно сделать что то асинхронное в констркуторое, что требует ссылку на еще не до конца созданный инстанс
в целом можно заменить на класс с констркутором без параметров и отдельно написать фабирку

Vladimir
13.02.2018
10:52:07

Sergey
13.02.2018
10:52:47
вы и так можете из констркутора вызывать что угодно и передать this, тут особо ничего не меняется...
а конеретно suspend констркуторы видимо как раз и будут генерироваться в фабирки, т.е. не будут являться констркуторами с точки зрения jvm

Quantum Harmonizer
13.02.2018
10:54:58
Стоп, а зачем это нужно? Можно же делать ленивые саспенд-геттеры, это идейно правильнее.

Sergey
13.02.2018
10:59:50
если по назначению: то например val service = MyService() который в констркуторе ждет например соединения с бд
ну а меня интересует кейс не по назначению, чтобы можно было откладывать выполнение инициализации. так можно сделать билдеры
т.е. создаем некий объект заготовку, напонляем его значениями, и только потом вызываем инициализацию

Quantum Harmonizer
13.02.2018
11:02:24

Sergey
13.02.2018
11:05:25
MyDbConnection() - засыпает внутри, на время соединения с бд

Quantum Harmonizer
13.02.2018
11:06:07

Kirill
13.02.2018
11:06:13

Sergey
13.02.2018
11:07:34
Не знаю ситуации, но может стоит сделать инициализацию ленивой, по запросу?
abstract class Buildable {
suspend fun waitBuild() = TODO(suspendCorutine)
fun build() = TODO(resumeCorutine)
}
class MyObj(): Buildable {
lateinit var x: String
val y: String
suspend init {
waitBuild()
y = "Hello, $x"
}
}
fun sample() {
val stub = MyObj()
stub.x = "username"
stub.build()
println(stub.y) // Hello, username
}

Quantum Harmonizer
13.02.2018
11:12:29

Gleb
13.02.2018
11:12:37
Привет!
Почему при IS не происходит автокастинг
.dropWhile {it.cause is StatusRuntimeException}
И приходится дальше все равно оборачиваться
&& (it.cause as StatusRuntimeException)

Google

Quantum Harmonizer
13.02.2018
11:13:20

Sergey
13.02.2018
11:13:30

Gleb
13.02.2018
11:14:08
it.cause is StatusRuntimeException && (it.cause as StatusRuntimeException)
Разве после && нет гарантии уже?

Quantum Harmonizer
13.02.2018
11:14:10

Sergey
13.02.2018
11:14:55
а если была бы такая фича, то компилятор бы сам это все написал

Gleb
13.02.2018
11:15:16
fucking mutations(
@Harmonizr Спасибо все ясно!

Quantum Harmonizer
13.02.2018
11:16:17

Sergey
13.02.2018
11:16:46
да, но тоже самое происходит и в обычном констркуторе. если this утечет в констркуторе

Quantum Harmonizer
13.02.2018
11:21:37

Sergey
13.02.2018
11:22:58
ну правила все те же что и для обычных констркуторов, просто нельзя допускать того чтобы this утекал куда попало. тут ничего не меняется
разница только в том что можно вызывать саспенд функции. с точки зрения понимания все ровно также
еще раз: оснвной бонус в том, что компилятор будет делать нехилые такие преобразования, которые сейчас нужно делать вручуню

Dmitry
13.02.2018
11:57:49
Ребят, подскажите, пожалуйста, где внятно (можно на английском) почитать про обработку ошибок при использовании корутин?

Andrew
13.02.2018
12:01:12
Собственно, если suspend-конструктор можно вызывать только в suspend-функциях, то полуготовый объект никуда не утекает. Но если правильно готовить DI, то нужды в конструкторе вызывать suspend-функции практически нет, имхо.

Mikhail
13.02.2018
12:17:03
Я думал, времена, когда модель пользователя сама ходила за собой в бд давно прошли

Sergey
13.02.2018
12:18:42

Google

Sergey
13.02.2018
12:19:08
ну, т.е. если какой то метод di должен что то подождать при предоставлении требуемой зависимости
или речь про то, что объект должен создаваться только когда все его зависимости уже есть?

Andrew
13.02.2018
12:22:21

Sergey
13.02.2018
12:25:05

Andrew
13.02.2018
12:26:49

Sergey
13.02.2018
12:27:49
ну, речь про случай когда нужно зафиксировать значения в val. это можно сделать только в констркуторе (или придется делать временные переменные)


Andrew
13.02.2018
12:34:49
Не до конца понимаю.
class ImageView(val url: String) {
private var img: Image
suspend init {
img = loadImage(url)
}
}
fun somewhere() {
val view = ImageView("http://example.org/kitten.png")
}
class ImageView(private var img: Image)
suspend fun somewhere() {
val img = loadImage("http://example.org/kitten.png")
val view = ImageView(img)
}
Если в конструкторе надо решать, какую картинку грузить, это опять же скорее всего нарушает SRP (является не основной задачей конструктора, а второй) и стоит вынести наружу -- к примеру, в фабрику картинок.
Но как выше давно верно отметили, в качестве быстрого решения можно просто сделать suspend-фабрику, которая будет готовить для конструктора зависимости -- это тот же DI, но в масштабах одной функции, на случай если нет возможности брать и переделывать всех потребителей этого класса.

Sergey
13.02.2018
12:45:58

Bogdan
13.02.2018
12:47:43

Sergey
13.02.2018
12:52:53


Andrew
13.02.2018
12:58:25

Bogdan
13.02.2018
13:02:26
я надеюсь ты доволен

Andrew
13.02.2018
13:11:54

Dibro
13.02.2018
15:35:56
@KirillTim что такое Kotlin-CR?
https://github.com/JetBrains/kotlin/commit/99e731f6a62cdcd38431a7023517dad28a4a0e7c

Kirill
13.02.2018
15:37:32

Sergey
13.02.2018
15:39:52
возможно вот это? https://upsource.jetbrains.com/kotlin/review/KOTLIN-CR-1546

Dibro
13.02.2018
15:41:32

Kirill
13.02.2018
15:46:17

Google

Kirill
13.02.2018
15:46:20

Sergey
13.02.2018
15:49:34
Да, наверное
вроде там обсуждают и пулл реквесты с гитхаба, нет?
вот например https://upsource.jetbrains.com/kotlin/review/KOTLIN-CR-1722

Kirill
13.02.2018
15:50:27

Sergey
13.02.2018
15:53:20
т.е. оно просто в upsource автоматический из гитхаба копируется?

Kirill
13.02.2018
15:55:21
Думаю что да. Учитывая то, что внешний человек пишет @yole