@kotlin_lang

Страница 604 из 982
Quantum Harmonizer
24.03.2018
09:05:47
OMG, no both

Vitalii
24.03.2018
09:05:51
No tarball either :(

Fag
24.03.2018
09:06:00
No windows either

Ugh

Google
Vitalii
24.03.2018
09:06:15
Which linux distribution do you have?

Fag
24.03.2018
09:06:19
Ive been trying to install the Jdk for 3 days on Mint

Ive gone through countless forum posts

Vitalii
24.03.2018
09:06:36
Is there any ppa for 10th java?

Fag
24.03.2018
09:07:01
I dont know, but I tried for 7, 8, and 9

Vitalii
24.03.2018
09:07:52
Found this: http://jdk.java.net/10/

Fag
24.03.2018
09:08:12
Thats openJDK : (

I looked at that page



Nameless
24.03.2018
09:10:47
Quantum Harmonizer
24.03.2018
09:14:19
Что тут понимается под диспатчингом? Доставка событий?

Fag
24.03.2018
09:19:18
Update:

i managed to find the archived JDK's from like, JDK 1 to JDK 9.0.1 so im currently installing 9

Google
Fag
24.03.2018
09:20:11
Thanks guys for trying ?

Mikhail
24.03.2018
09:35:37
fun <P1, P2, R> let2(p1: P1?, p2: P2?, block: (Pair<P1, P2>) -> R): R? { return p1?.let { v1 -> p2?.let { v2 -> block(v1 to v2) } } }

Boris
24.03.2018
09:41:04
Andrey
24.03.2018
09:42:00
не понял как использовать

(a,b).let2 {} ?

Boris
24.03.2018
09:42:16
Да и вообще нет смысла использовать здесь пару

Два параметра на вход, два параметра у лямбды, инлайн, иф

inline fun <P1,P2,R> ifNonNull(p1:P1?,p2:P2?,block:(P1,P2)->R)R? = if(p1 != null && p2 != null) block(p1,p2) else null типа такого

Mikhail
24.03.2018
10:01:28
А смысл ещё раз эту же пару создавать?
Ну у нас утили так работают, кое где было удобно. Можно и без пары

(a,b).let2 {} ?
Нет. let2(a, b) {}

Andrey
24.03.2018
10:02:48
а как сделать параметры в лямбде необязательными?

если так: inline fun <P1, P2, R> let2(p1: P1?, p2: P2?, block: (P1,P2) -> R): R? { return if (p1 != null && p2 != null) { block(p1,p2) } else { null } }

Boris
24.03.2018
10:11:00
В этой функции не вижу смысла

Оно же будет налл видимо и никогда не будет срабатывать

Andrey
24.03.2018
10:15:23
чтобы можно быть использовать так let2(a,b) { print() }

а не let2(a,b) { _,_ -> print() }

Boris
24.03.2018
10:16:18
Так нельзя

Google
Quantum Harmonizer
24.03.2018
10:16:33
а не let2(a,b) { _,_ -> print() }
а что, подчёркивания платные?

Andrey
24.03.2018
10:18:16
конечно, тогда действительно проще вместо этого всего использовать if - будет лучше выглядеть

Quantum Harmonizer
24.03.2018
10:20:56
...кроме случая, когда переменные не локальные.

Boris
24.03.2018
10:22:22
...кроме случая, когда переменные не локальные.
Это была бы хорошая фича если бы в условиях и венах можно было бы локализовать

Quantum Harmonizer
24.03.2018
10:23:10
ну вот какой-нибудь let2, только без Pair и с нормальным названием

Andrey
24.03.2018
10:23:51
не два, а несколько, было бы хорошо для синтаксиса

Igor
24.03.2018
10:29:03
Как можно красиво промапать такой java интерфейс org.w3c.dom.NodeList ? public interface NodeList { public Node item(int index); public int getLength(); }

Ivan
24.03.2018
10:39:50
Вот тут уже обсуждали
Да-да, я помню, но тогда мы обсуждали как написать своё, а я тут подумал вдруг есть готовое

Mikhail
24.03.2018
10:45:42
чтобы можно быть использовать так let2(a,b) { print() }
Мой вариант с парой можно так исаользовать

Ivan
24.03.2018
10:49:52
Очень туманная формулировка
А что туманного? Вообще у меня постоянно такой кейс появляется, метод принимает базовый класс, а обработчики под конкретный наследник и нужно из этого метода объект задиспатчить на нужный(ые) обработчик(и). При этом наследников много, они часто добавляются, и это место горячее

Ivan
24.03.2018
10:53:05
Какая-то странная ситуация.
Омг, да вот у Вас когда был кейс с парсингом json - это было примерно тоже самое

Да и вообще постоянно это возникает, если на эвентах живёшь

Quantum Harmonizer
24.03.2018
10:53:35
Ivan
24.03.2018
10:59:29
Да вроде котлин ничего такого особенного в эту тему не привнес, разве что sealed классы. А в остальном наследование или мапа.
Не, я может даже не в разрезе котлина, а вообще. Вон товарищ выше сделал же свой велик, я про аналогичные решения

Kirill
24.03.2018
11:07:38
Или тебе именно map нужен с сохранением исходного интерфейса?

Google
Ivan
24.03.2018
11:08:25
Ну вот у меня такая ситуация, я работаю в финансовом брокере, мы слушаем несколько рынков из которых приходит маркет-дата (котировки, сделки, etc), соответственно очень хочется работать на пуш и вся система построена именно на пуше. Получается достаточно часто возникает ситуация, когда с сокета прилетают байты, мы их преобразуем в объекты, а дальше на сделку нужно сделать одно, на котировку другое. Соответственно на основе одних событий рождаются другие и их так же нужно обработать

Igor
24.03.2018
11:10:09
Накостылить итератор?
Просто надо превратить его в List<NodeItem> или Sequance<NodeItem> (ну или итератор). Не понятно как сделать это “красиво”, можно и конечно и “НЕ красиво” и вынести в ext-func (но зачем, если оно только в одном месте используется)

Ivan
24.03.2018
11:23:18
Звучит как кандидат на реактивную парадигму
Ну дык оно и есть эвент-сорсинг, CQRS и вот это всё, только начинали делать когда ещё это не было популярно, так что пришлось великов накрутить

Boris
24.03.2018
11:23:21
Каналы тоже должны хорошо зайти

Но каналы им бы ещё подрасти

Ivan
24.03.2018
11:24:13
Кстати, а у каналов разве не стоит проблемы диспатчинга?

Из канала, наверное Any приходит, нет?

Boris
24.03.2018
11:25:22
Из канала, наверное Any приходит, нет?
Да там всё тоже самое что везде. И эни совершенно не обязательно

Ivan
24.03.2018
11:25:28
А, кстати, я скажу вам чем котлин тут помогает очень сильно: нормальные ссылки на методы

Igor
24.03.2018
11:28:31
Из канала, наверное Any приходит, нет?
Ну они generic, те не надо забывать про боксинг Да и помню Роман говорил, что они “тяжелое абстракции”

Boris
24.03.2018
11:28:45
В вопросе диспатчинга главный вопрос по чему мы диспатчим

Kirill
24.03.2018
11:28:51
ну можно как-то так: (0..nodeList.length).asSequence().map { nodeList.item(it) }
правда красивым это назвать сложновато)

Ivan
24.03.2018
11:29:46
Ну в джаве они тоже есть
Чем-то они в последний раз мне не понравились... на вскидку могу вспомнить Exception

Vitalii
24.03.2018
11:39:26
Никто не сталкивался с задачами по работе из Kotlin/JVM с Golang? Есть какие-нибудь способы коммуникации, кроме JNI и вызова go через вызов shell-команд?

Egor
24.03.2018
11:47:28
Попробуй исходники MIPS посмотреть, он ровно тем самым занимается

Вызывает го из джавы, я имею ввиду

Google
Egor
24.03.2018
11:48:03
Как - не знаю, но может что-то оригинальное

Ыыыы, не MIPS, ща скажу как прога зовется

Вот, вот эта http://courses.missouristate.edu/KenVollmar/mars/

Vitalii
24.03.2018
12:08:00
Спасибо, посмотрю.

Bogdan
24.03.2018
14:08:02
ниукого не было проблемы с js, в мультиплатформеном проекте?

Andrew
24.03.2018
14:17:17
Ну они generic, те не надо забывать про боксинг Да и помню Роман говорил, что они “тяжелое абстракции”
Так а что, есть альтернативы? Я так-то с радостью собирался тащить каналы в мультиплатформенные коммон-модули, когда они будут с жвм портированы.

Igor
24.03.2018
14:18:18
Где были статьи от авторов rxjava что они на каких-то ворлоадах обходят котлин каналы

Жабра
24.03.2018
14:44:03
val channel = Channel<Int>() for (i in 0..10) channel.offer(i) println("Is empty: ${channel.isEmpty}") Почему выдаёт true?

Igor
24.03.2018
14:45:02
Ну потому что если capacity 0 и никто не слушает, то эвенты просто игнорятся (если кидать через offer)

Жабра
24.03.2018
14:47:28
А как сделать так, чтобы не игнорились?

val channel = Channel<Int>() val job = launch { for (i in 0..10) println(channel.receive()) } for (i in 0..10) channel.offer(i) job.join() Тут его слушали, но ничего не произошло

Igor
24.03.2018
15:08:06
Ну подозреваю что у тебя нижний цикл выполнился быстрее чем запустился код внутри lauch{} и все offer ушли в никуда

Хочешь что бы не игнорились, юзай просто send вместо offer

Жабра
24.03.2018
15:10:02
Хочешь что бы не игнорились, юзай просто send вместо offer
А зачем тогда offer? И как его использовать?

Igor
24.03.2018
15:11:37
Имхо что бы кидать в канал сообщения из “НЕ suspend” функций, без блокировки (но без гарантий (там true/false возвращается)) https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.experimental.channels/-send-channel/offer.html

Igor
24.03.2018
15:15:00
Если сильно хочешь offer, то сделай хотя бы канал с буфером (в твоем случае хотя размера 11) val channel = Channel<Int>(11)

Boris
24.03.2018
15:17:31
fun test() { val channel = produce { for (i in 0..10) { send(i) } } launch { for (i in channel) { println(i) } } }

Жабра
24.03.2018
15:18:48
Окей, приемлимо. Другой вопрос: если я хочу очистить канал без закрытия, то подойдёт ли что-то вроде suspend fun Channel<out Any>.clear() { while (!isEmpty) { receive() } } такого? Или костыль? Просто не нашёл чёт как чистить, но не закрывать.

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